如何在bash中打印流的输出?
我有一个输出流:如何在bash中打印流的输出?,bash,Bash,我有一个输出流: xxx 2>&1 | grep 'Word:' | sed -e ... 某个命令的输出包含字:。我可以grep这个单词并执行其余的命令。它工作得很好。最后我得到了我期望的结果。但是现在我想在我的屏幕上的日志中显示完整的日志(因此流2>&1中的所有内容),然后再刷新单词:,完成我的工作 如果我做了xxx2>&1,那么我可以在屏幕上看到我想要的完整输出,但是因为我必须grep,它不再显示在我的命令xxx2>&1|grep'字中:'| sed-e… 我在想这样的事情
xxx 2>&1 | grep 'Word:' | sed -e ...
某个命令的输出包含字:
。我可以grep
这个单词并执行其余的命令。它工作得很好。最后我得到了我期望的结果。但是现在我想在我的屏幕上的日志中显示完整的日志(因此流2>&1
中的所有内容),然后再刷新单词:
,完成我的工作
如果我做了xxx2>&1
,那么我可以在屏幕上看到我想要的完整输出,但是因为我必须grep
,它不再显示在我的命令xxx2>&1|grep'字中:'| sed-e…
我在想这样的事情:
2>&1 | echo 2>&1 | grep 'Word:' | sed -e ...
但这不起作用。
tee
:将stdin以及命令行参数中指定的文件复制到stdout
您可以使用tee
将stdin复制到stderr:
xxx 2>&1 | tee /dev/stderr | grep ...
如果
/dev/stderr
不可用,请使用/proc/self/fd/2
注意/proc/
在不同的操作系统中工作方式不同,如果安装了它的话。它不是bash的一部分。@ghoti也可以说/dev/stdin | stdout | stderr
也不是bash的一部分。实际上,它们是bash的一部分。检查手册页“重定向”部分的底部。“如果运行bash的操作系统提供了这些特殊文件,bash将使用它们;否则,它将使用下面描述的行为在内部模拟这些文件。”@ghoti,但请稍候,当作为cmdline参数提供时,它是否仍能正常工作?我的意思是,bash是否“在内部”处理cmdline参数?