2011-05-19 93 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会更酷。

相关问题