Ich neige dazu, häufig verwendeten Dateien und Ordnern das Zeichen "Akzentgrab" (Non-Shift-Tilde, Back-Tick oder einfacher alter Akzent, was auch immer ...) voranzustellen, da es leicht zu erreichen ist, und lassen Sie mich Sortieren Sie die Dinge alphabetisch, während ich einige Elemente oben anzeigen kann. Es funktioniert gut, außer wenn ich über die CLI oder SSH / SCP auf diese Dateien zugreife.
Wenn ich versuche, einen Befehl auszuführen und die Datei ungehindert aufrufe, wird ich in eine interaktive Sitzung versetzt. Zum Beispiel
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>
Aber wenn ich die logische Lösung versuche ↯
# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
↩
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Ich weiß, dass die "neue" Regel darin besteht, eine Syntax wie export NOW=$(date)
vs export NOW=
`date` zu verwenden (tatsächlich hatte ich eine Zeit damit, letztere sogar in SE MD-Syntax zu schreiben ...), aber dies hat nichts mit dem ENV
oder einem Skript zu tun . ..
Hinweis: Dies ist eine Mac OS X-Umgebung, aber die GUI hatte nie ein Problem mit dem täglichen Umgang mit diesem Zeichen, und normalerweise, wenn im Terminal ein Syntaxproblem auftritt, Apple macht einen ziemlich guten Job beim Deaktivieren des Verhaltens in der GUI ... Ich bin mir nicht sicher, ob dies ein Fehler ist oder ob die Technik für den Umgang mit solchen Pfaden einfach unklar ist. Aber bisher konnte ich keinen finden Weg "um ihm zu entkommen" ?
Antworten:
Sie können 3 Backslashes verwenden, wie von Jed Daniels erwähnt, oder Sie können es in einfache Anführungszeichen setzen
(')
und einen einzelnen Backslash verwenden.Beispiele für beide sind unten.
quelle
Drei Backslashes sollten es tun:
Der erste Backslash entgeht dem Backtick, sodass er an die andere Seite gesendet wird. Die andere Seite gibt jedoch den Fehler aus, da erwartet wird, dass Backticks paarweise vorliegen. Der zweite Backslash entgeht dem ersten Backslash. Dann benötigen Sie die zusätzlichen zwei Backslashes, damit Sie einen Escape-Backslash an die andere Seite senden können.
EDIT: Wie Rik erwähnt, können Sie dies auch mit einem einzigen Anführungszeichen tun. Ich hatte nicht daran gedacht, weil Sie es uns nicht mit Variablen geben können (sie werden auf dem lokalen System nicht in einfachen Anführungszeichen erweitert).
quelle
Normalerweise werden Befehlszeilen einmal von der Shell interpretiert. Aus historischen Gründen übergibt scp den Dateinamen jedoch auch an die Remote-Shell, sodass der Dateiname zweimal von Shells interpretiert wird . Dies ist auch das, was Dinge wie
scp remote:'/path/prefix*' /path/local/
Arbeit macht, die Remote-Shell erweitert sich/path/prefix*
.Der einfachste Weg, um die zweite Erweiterung zu vermeiden, ist die Verwendung von SFTP, das keine Remote-Shell verwendet. Die Glob-Erweiterung wird weiterhin ausgeführt. Da Sie jedoch Befehle für stdin eingeben können, können Sie die lokale Shell-Erweiterung vollständig vermeiden.
Abgesehen davon können Sie jeden der normalen Shell-Quoting-Mechanismen verwenden, einschließlich der von @Jed Daniels und @Rik Schneider, aber ich wollte erklären, was tatsächlich passiert, und sftp erwähnen.
(Sie können alle Arten von Shell-Funktionen in Ihrem scp-Dateinamen verwenden.
scp server:\$HOME/file dest
Verwenden Sie beispielsweise die Idee der Remote- Shell von$HOME
, während beim\
Herausnehmen die Funktionen Ihrer lokalen Shell verwenden würden.)quelle