一个新手问题.. 我正在安装RVM(一个管理Ruby版本的工具)。它的命令是:
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
Run Code Online (Sandbox Code Playgroud)
我知道这<
是一个命令重定向操作符(对吗?)。
那么,为什么<
需要第二个(它做什么)?
它将一个字符串转换为它所代表的 bash 脚本输出的文件描述符。这可能会令人困惑,这是一个例子
如果您键入echo <(ls)
它将打开一个新的文件描述符,其名称被替换。所以命令可能会变成 say echo /dev/fd/63
。
需要文件的程序现在可以读取命令的输出而无需接受标准输入。
$ my_program ls
Error: 'ls': No such file or directory.
$ my_program <(ls)
my_program was called with the argument /dev/fd/63
bin dev etc ...
Run Code Online (Sandbox Code Playgroud)
如果没有提供输入源,许多 Linux 程序将等待标准输入。因为可以使用“|”运算符将标准输出通过管道传输到标准输入,因此您可以使用 say ls | grep hello
。这只有效,因为 grep 会一直等待输入,如果它希望打开并读取文件名以获取其数据,则管道运算符不起作用。这就是为什么你需要 <(...)。
我希望这是可以理解的。:-)
与 < 运算符一起将文件的输出重定向到读取 stdin 的程序,这具有以下含义:
Bash:读取此文件的输出,该文件是根据此命令的输出创建的。
说明:
<
or <()
):与常规数学相同,运算符和操作数的表达式将被评估和替换。3+2*3 变成 5*3 变成 15。在 bash 语言中也是如此。强调罗杰观点的一个很好的例子是这个表达式:
if [ -f my_condition ] then something fi
Run Code Online (Sandbox Code Playgroud)
这里括号的内容将作为条件语句进行评估,即如果 my_condition 为真,则执行某些操作。但是:[
实际上只是程序的别名test
,当使用参数 -f 调用它时,将检查文件是否存在。
归档时间: |
|
查看次数: |
1402 次 |
最近记录: |