Kann SCP keinen Pfad mit Leerzeichen aus dem Bash -Skript haben?
Frage
Ich habe ein Bash -Skript, das einen SCP -Befehl zum Ausführen generiert. Die relevanten Teile des Codes sehen so aus:
echo $COPY_CMD
$COPY_CMD
Meine Ausgabe sieht so aus:
rascher@localhost:~/Desktop/video_final$ ./xfervids.sh scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" rascher@192.168.1.101:./video_working/ rascher@192.168.1.101's password: "/media/My: No such file or directory Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": No such file or directory
Wenn ich jedoch Zeile 2 meiner Ausgabe nehme: scp "/media/...
, Kopieren Sie es und fügen Sie es in das Terminal ein, es funktioniert.
Was mache ich falsch? Ich habe versucht, dem Raum in "meinem Buch" zu entkommen ("My\ Book"
) mit zwei \
Charaktere und nicht eins ("My\\ Book"
) Aber ich kann das nicht dazu bringen, sich konsequent zu verhalten. Hilfe?
Lösung
Sie müssen unerträglich vorsichtig sein, wenn es in den Pfadnamen Räume gibt.
Im Kontext brauchen Sie wahrscheinlich:
eval $COPY_CMD
Diesmal brauchen Sie keine Zitate um die Variable.
Andere Tipps
Du solltest lesen Diese Diskussion wie und warum vermeiden, Befehle in Variablen zu setzen und Diese Diskussion der Sicherheitsauswirkungen von eval
.
Ein Grund, warum Sie auf diese Weise Variablen verwenden möchten, besteht darin, die von einem Skript ergriffenen Aktionen zu protokollieren oder anzuzeigen. Probleme treten auf, wenn Sie in der Lage sind, Räume usw. richtig zu zitieren oder zu entkommen, usw., wie Sie festgestellt haben. Eine Möglichkeit, das zu tun, was Sie möglicherweise verwenden möchten, ist zu verwenden set -x
und set +x
Um diese Art von Ausgabe an verschiedenen Stellen in Ihrem Skript ein- und auszuschalten.