如何将一个命令的输出同时传输到另外两个命令的输入?
答案1
听起来该tee
命令会执行您想要的操作。
关键是使用
>( )
为了流程替代。使用tee
,使用以下模式:
tee >(proc1) >(proc2) >(proc3) | proc4
因此,如果您想ls
将 的输出用作两个不同grep
程序的输入,将每个程序的输出保存grep
到不同的文件,并通过管道传输所有结果less
,请尝试:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
结果ls -A
将被“传送”到两个grep
文件中。文件hidden-files
将包含第一个文件的输出内容grep
,normal-files
并将包含第二个文件的结果grep
。 所有文件将显示在寻呼机中 编辑:你看到的less
。less
是完全相同的输出的ls -A
,而不是 s 的结果grep
。如果您想将输出从 修改ls -A
为less
(例如交换顺序,使普通文件列在隐藏文件之前),请尝试以下操作:
ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less
如果没有>/dev/null
, s 的输出grep
将被附加到 的输出,ls -A
而不是替换它。