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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top