Ssh

如何避免路徑中的“`”(重音/反引號)?

  • July 1, 2011

我傾向於在經常使用的文件和文件夾前加上“重音重音”字元(非移位波浪號、反引號或普通的重音,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)vs export 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 提到的,你也可以用單引號來做。我沒有想到這一點,因為您不能將它與變數一起使用(在單引號中它們不會在本地系統上擴展)。

引用自:https://serverfault.com/questions/286204