Ich habe ein Skript, das scp eine Datei vom Remote-Host zurück zum lokalen ist. Manchmal enthalten die Dateinamen Leerzeichen. scp mag keine Leerzeichen in seinen Dateinamen. Aus irgendeinem Grund haben meine Versuche, mit den Leerzeichen umzugehen, nicht zum richtigen scp-Pfad geführt.
Code:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop
Ergebnisse in
Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
PFAD in Anführungszeichen setzen "$PATH"
führt zu demselben Fehler.
Das Austauschen der Leerzeichen gegen maskierte Leerzeichen funktioniert ebenfalls nicht, obwohl dies meines Erachtens Folgendes sein sollte:
ESC_PATH=${PATH/' '/'\ '}
Obwohl das Drucken des maskierten Pfads zeigt, dass die Bearbeitung funktioniert hat:
echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
$PATH
für Ihre eigenen Variablen verwenden, da Ihr Terminal dies benötigt.Antworten:
Sie sollten sowohl die Erklärung als auch die Verwendung angeben
Wenn Sie den ersten nicht zitieren,
$path
wird nur der erste Teil enthalten. Wenn Sie die zweite nicht zitieren,scp
wird jeder durch Leerzeichen getrennte Teil als Argument behandelt.(Ich habe zu geändert
$PATH
,$path
weil$PATH
es sich um eine wichtige reservierte Variable handelt und Sie sie nicht für allgemeine Zwecke verwenden dürfen.)quelle
Ich habe mit ssh etwas sehr Ähnliches versucht und eine Befehlszeile durchlaufen. z.B
Ich fand, dass das einfache Definieren von "$ PATH" nicht den Trick machte - es warf immer noch Fehler auf. Allerdings, wenn ich rannte
Das hat funktioniert. Der Trick besteht darin, sicherzustellen, dass ein zusätzlicher Satz von "" von der Shell an den Befehl ssh übergeben wird.
quelle