Ich habe ein Skript, das scp eine Datei vom Remote-Host zurück zum lokalen Host 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 [email protected]:/Users/Me/Desktop
Ergebnisse in
Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
PATH in Anführungszeichen setzen "$PATH"
gibt den gleichen Fehler.
Das Austauschen der Leerzeichen gegen Escape-Leerzeichen funktioniert auch nicht, obwohl es, soweit ich das beurteilen kann, sollte:
ESC_PATH=${PATH/' '/' '}
Obwohl das Drucken des Escape-Pfads zeigt, dass die Bearbeitung funktioniert hat:
echo $ESC_PATH
> /var/root/Documents/MyFile OG-v1.2.3.pkg
Akzeptierte Antwort:
Sie sollten sowohl die Deklaration als auch die Verwendung zitieren
path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" [email protected]:/Users/Me/Desktop
Wenn Sie das erste nicht in Anführungszeichen setzen, $path
enthält nur den ersten Teil. Wenn Sie das zweite nicht zitieren, scp
behandelt jeden durch Leerzeichen getrennten Teil als Argument.
(Ich habe $PATH
geändert zu $path
weil $PATH
ist eine wichtige reservierte Variable und darf nicht für allgemeine Zwecke verwendet werden.)