2013-04-11 110 views
31

看着魔安裝中出現的所有類型的項目(例如,對於RVM),你會經常看到類似這樣的命令: curl ... | bash ...什麼是斜線?

\curl ... | bash 

例如

\curl -L https://get.rvm.io | bash -s stable 

我想知道爲什麼這些命令以斜線開頭 - 它們在沒有它的情況下似乎運行良好。

有什麼建議嗎?

+1

重複在哪裏? – 2016-07-22 17:21:44

回答

54

這用於調用「原始」命令,避免使用可能的別名調用它。也就是說,在命令curl上禁用可能的別名並調整爲原來的別名。

如果你有

alias grep='grep --color=auto' 

,然後你做grep,就會有顏色。所以如果你不想要顏色,你只需要寫\grep

+5

謝謝...當你知道它時簡單,但不可能通過谷歌找到;) – pagid 2013-04-11 16:08:22

+2

只有在沒有相同名稱的函數時纔會調用原始命令。請參閱我的回答,以獲得通過bash評估的別名/函數/命令順序(簡而言之:'\ something':只會避免別名,但不會繞過函數。'command something':將繞過別名,功能並啓動命令「something」) – 2013-04-18 12:38:06

+0

這是一個有趣的觀點,@OlivierDulac。我在相關的帖子中發現了很多選項:http://stackoverflow.com/q/6162903/1983854。按照你的例子,是的,'\ something'只是繞過別名,而不是具有這個名字的可能的函數。爲此,'$(which command)','「command」'可以工作。 – fedorqui 2013-04-20 11:23:56

20

這是一個反斜槓

是啓動命令開始使用該名稱(或功能),而不是別名。

爲了確保繞過兩個功能別名

command somecommand 

繞過只是別名(並由此推出的功能,如果沒有功能,命令):

\somecommand 

讓我們看看哪個優先於哪個(我使用bash 2.05b ... ymmv)

我會定義一個函數,並用相同的名稱作爲命令別名(LS):

$ alias ls='echo A' 
$ function ls { echo B ; } 

使用「型-all LS」展示評測的順序:

$ type -all ls 
ls is aliased to `echo A' 
ls is a function 
ls() 
{ 
    echo B 
} 
ls is /usr/bin/ls 

但我們可以找出還試圖出來:

$ ls 
A 
$ \ls 
B 
$ command ls 
file1 file2 file3 

這麼看來的優先順序是:別名 -before- 函數 -before- 在路徑中執行的命令。

當然,如果你精確的相對/絕對路徑,它被再用力是命令指向:

$ /usr/bin/ls 
file1 file2 file3 
+0

注意:我所討論的命令是在bash(和「command」命令中)。我注意到它在一些其他shell中有所不同! – 2013-10-03 17:04:39

+3

今天我瞭解了「命令」關鍵字。經過近二十年的Unix/Linux外殼使用。 – Perleone 2013-10-22 20:49:06

+0

@Perleone:總是有新東西可以被發現或創造,這就是爲什麼我們喜歡這個^^ – 2013-10-23 08:58:53

2

它繞過可能的別名curl