一个命令的输出可以通过管道传输到另外两个命令吗?

一个命令的输出可以通过管道传输到另外两个命令吗?

如何将一个命令的输出同时传输到另外两个命令的输入?

答案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将包含第一个文件的输出内容grepnormal-files并将包含第二个文件的结果grep所有文件将显示在寻呼机中less 编辑:你看到的less完全相同的输出ls -A,而不是 s 的结果grep。如果您想将输出从 修改ls -Aless(例如交换顺序,使普通文件列在隐藏文件之前),请尝试以下操作:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

如果没有>/dev/null, s 的输出grep将被附加到 的输出,ls -A而不是替换它。

来源

答案2

使用“tee”。

例子:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

这会将 grep 命令的输出发送到终端和厕所(其输出又重定向到文件 grepresult)。

维基百科文章对“Tee”进行了解释tee(命令)。核心是:“tee 命令读取标准输入,然后将其内容写入标准输出并同时将其复制到指定的文件或变量中。”。

相关内容