PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash-script Problem mit Leerzeichen



Krischan
10-12-2008, 13:17
Hallo,

ich nutze ein Script um einzelne VM´s meines ESXi-Servers zu sichern. Das ganze sieht verkürzt so aus:

VM=$1
SERVER=192.168.80.1
USER=root
PASS=geheim
DSPATH=/vmfs/volumes/datastore1

scp -r root@${server}:${DSPATH}/${VM} /home/backup

Das ganze funktioniert so lange, bis z.B. VM nicht mehr "test" heißt sondern "test server"; sprich in VM ein Leerzeichen enthalten ist.

Ohne Script ist das ganze kein Problem. Ein:

scp -r root@192.168.80.1:'"/vmfs/volumes/datastore1/test server"' /home/backup

funktioniert ohne Probleme. Im Script also mit:

root@${server}:${DSPATH}/${VM}

funktioniert es nicht mehr. Wer weiß Rat? Ich bin, was Linux und die bash angeht absoluter Newbie!

BLUESCREEN3D
10-12-2008, 14:17
scp -r root@${server}:${DSPATH}/"\"${VM}\"" /home/backup

klaus_harrer
10-12-2008, 14:23
Hallo

Man könnte das Leerzeichen escapen.



VM=$1


durch



VM=`echo $1 | sed 's/ /\\ /'`


ersetzen.

MfG
Klaus Harrer

Krischan
11-12-2008, 10:34
scp -r root@${server}:${DSPATH}/"\"${VM}\"" /home/backup

Hallo,

vielen Dank, das funktioniert Prima! Zwei Fragen hätte ich allerdings noch.

1. Was bewirkt das "\" \"" genau?
2. Was mache ich wenn im ${DSPATH} ebenfalls ein Leerzeichen enthalten ist?


"\"${DSPATH}/${VM}\""

oder


"\"${DSPATH}\""/"\"${VM}\""

Krischan
11-12-2008, 10:36
Hallo

Man könnte das Leerzeichen escapen.



VM=$1


durch



VM=`echo $1 | sed 's/ /\\ /'`


ersetzen.

MfG
Klaus Harrer

Hallo,

das funktioniert leider gar nicht. scp sagt dann immer:

scp: /vmfs/volumes/datastore1/WS: No such file or directory
cp: Aufruf von stat für âTestâ nicht möglich: No such file or directory

ContainerDriver
11-12-2008, 12:07
Hallo,

vielen Dank, das funktioniert Prima! Zwei Fragen hätte ich allerdings noch.

1. Was bewirkt das "\" \"" genau?

Mit dem Backslash entwertest du das nachfolgende Zeichen. Deine Argument lautet dann wörtlich (es wird so als String an scp übergeben)


root@toller_server:verzeichnis/"test mit leerzeichen"
.


2. Was mache ich wenn im ${DSPATH} ebenfalls ein Leerzeichen enthalten ist?


"\"${DSPATH}/${VM}\""

oder


"\"${DSPATH}\""/"\"${VM}\""

Die beiden Lösungen haben den gleichen Effekt.