Ssh
如何避免路徑中的“`”(重音/反引號)?
我傾向於在經常使用的文件和文件夾前加上“重音重音”字元(非移位波浪號、反引號或普通的重音,whathaveyou..),因為它很容易理解,讓我來按字母順序排序,同時讓我選擇在頂部顯示一些項目。它執行良好,除非我通過 CLI 或 SSH/SCP 訪問這些文件。
如果我嘗試執行命令,呼叫未轉義的文件↝它會將我踢到互動式會話中..例如↯
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/ ↩ >
然而,如果我嘗試合乎邏輯的解決方案↯
# 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
我知道“新”規則是使用類似
export NOW=$(date)
vsexport NOW=
date
的語法(事實上,我有一段時間甚至用 SE MD 語法編寫後者……)但這與ENV
腳本或任何腳本無關。 ..注意: 這是一個 Mac OS X 環境,但也就是說,GUI 在日常處理這個字元時從來沒有遇到過問題,通常,如果終端中出現語法問題,Apple在禁用 GUI 中的行為方面做得很好……不確定這是否是一個錯誤,或者處理此類路徑的技術是否只是晦澀難懂.. 但到目前為止,我一直無法找到“逃避它”的方式?
您可以使用 Jed Daniels 提到的 3 個反斜杠,也可以將其用單引號括起來
(')
並使用單個反斜杠。兩者的範例如下。
$ touch dir/'`rik' $ ls -l dir total 1865376 -rw-r--r-- 1 rik staff 0 Jul 1 09:51 `rik $ scp localhost:dir/\\\`rik ./ `rik 100% 0 0.0KB/s 00:00 $ scp localhost:dir/'\`rik' ./ `rik 100% 0 0.0KB/s 00:00 $
三個反斜杠應該這樣做:
jed@jed-osx:~$ ls -la \`foo ls: `foo: No such file or directory jed@jed-osx:~$ scp desk:\\\`foo . `foo 100% 0 0.0KB/s 00:00 jed@jed-osx:~$ ls -la \`foo -rw-r--r-- 1 jed staff 0 Jul 1 09:45 `foo jed@jed-osx:~$ rm \`foo
第一個反斜杠逃脫了反引號,因此它被發送到另一端,但另一端拋出錯誤,因為它期望反引號成對出現。第二個反斜杠轉義第一個反斜杠,然後您需要額外的兩個反斜杠,以便您可以將轉義的反斜杠發送到另一側。
編輯:正如 Rik 提到的,你也可以用單引號來做。我沒有想到這一點,因為您不能將它與變數一起使用(在單引號中它們不會在本地系統上擴展)。