这完美地工作:
./foo | ./bar
Run Code Online (Sandbox Code Playgroud)
但我想要这样的东西:
./bar <| ./foo
Run Code Online (Sandbox Code Playgroud)
所以我可以用相反的方式在命令行中更快地更改 foo 的参数。
管道需要是实时的——我的foo
程序永远不会返回。
这可能吗 ?
Oli*_*lac 10
一个简单而正确的方法是定义一个 foobar 函数,
foobar () { ./foo "$@" | ./bar ; }
Run Code Online (Sandbox Code Playgroud)
(根据需要在命令行中,或在某些启动脚本中,例如“.bashrc”)。然后每当你这样做:
foobar "this" that "and this also"
Run Code Online (Sandbox Code Playgroud)
它会做
./foo this that "and this also" | ./bar
Run Code Online (Sandbox Code Playgroud)
./bar < <( ./foo )
Run Code Online (Sandbox Code Playgroud)
例如:cat < <(echo "hello there!")
要了解其工作原理,请单独考虑脚本的各个部分。
此语法:cat < /path/to/file
将读取文件/path/to/file
并将其作为标准输入传输到cat
.
此语法:<(echo "hello there!")
表示执行命令并将标准输出附加到文件描述符,例如/dev/fd/65
. 整个表达式的结果是一个类似 的文本/dev/fd/65
,以及一个并行运行的命令并提供该文件描述符。
现在,组合起来,脚本将运行右侧命令,将其通过管道传输到文件描述符,将该文件描述符转换为左侧命令的标准输入,然后执行左侧命令。
据我所知,没有任何开销,它与 完全相同a | b
,只是语法糖。
归档时间: |
|
查看次数: |
2224 次 |
最近记录: |