我正在寻找|
bash shell 中的运算符的替代方案,以便将命令的输出重定向为下一个命令的输入。还有其他替代方案吗?
就像是 :
command1 | command2 | command3
替代方法:
command1 X command2 X command3
X
将代替使用|
。是否可以避免使用|
而将其替换为实际操作符?
答案1
相当于command1 | command2
command2 < <(command1)
这也可以扩展到三个(或更多)命令。
command3 < <(command2 < <(command1))
$ lspci | grep 'Network'
02:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
$ grep 'Network' <(lspci)
02:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
$ lspci | grep 'Network' | grep -o 'controller'
controller
$ grep -o 'controller' < <(grep 'Network' < <(lspci))
controller
然而,正如 Oli 所说,尽管这可能会产生相同的输出,但从技术上讲它与管道并不相同。
<(..) 将内部命令输出的 STDOUT 转换为文件处理程序(即命令 grep 打开的文件处理程序)。当您通过管道传输时,读取命令直接从 STDIN 读取(STDIN 正在用管道传输的命令的 STDOUT 填充)。这些细微的差别对于只知道如何读取 STDIN 的命令来说可能很重要。