2011-05-19 125 views
13

我一直在使用RVM了一段時間了,每次我只是複製並粘貼下面的命令來得到它設置:任何人都可以解釋這種語法嗎?

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) 

它的錯誤我,我不完全理解語法,爲什麼我們需要雙重<和括號。有人可以解釋這一點,或指出我的正確參考?

+1

這是不是有什麼理由:「curl -s ... | bash」?它看起來像是一個過度特徵蠕變的例子。 – 2011-05-19 21:06:00

+0

@William Pursell:我不知道你的版本和這個版本有什麼不同。 – Daenyth 2011-05-19 21:51:54

回答

13

第一個是輸入重定向。它將文件的內容作爲輸入輸入到程序中。第二個構造是<(),它是進程重定向:它像文件一樣處理進程的輸出。在這種情況下,效果是您將運行該網址的內容,就像它是一個bash腳本一樣 - 非常危險!如果你不相信完全來源,不要這樣做。攻擊者可以使用這種方法來運行危害系統的命令。

+2

好的回覆,特別是在注意到安全問題時。 – Mattis 2011-05-19 20:42:47

+0

想了解這個功能,試試這個:'echo <(id)'它會給你一個想法系統是如何實現的以及它如何被濫用(例如'dd if = <(look foo)''cp <看foo)/ tmp/x「等) – 2011-05-20 02:11:49

2

只是我2美分。 Bashs結構<()正如@Daenyth所述:「像文件一樣處理進程的輸出」。這種結構可能非常有用。只是考慮以下幾點:

diff <(ls dir1) <(ls dir2) 

這將用Vimdiff顯示的DIR1DIR2內容之間的差異。使用vimdiff而不是diff會更酷。

相關問題