在bash
脚本中,我正在使用conntrack
和 之类的工具tcpdump
将结果输出到文件,但希望在执行命令/脚本后隐藏命令行的第一个输出行上显示的标准消息。
信息:
conntrack v1.0.0 (conntrack-tools): 6 flow entries have been shown.
阅读bash
手册页后,我尝试了以下操作:
conntrack -L|grep "dport=6439" &> /tmp/file
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么重定向选项,conntrack
说明流条目数的消息总是显示在我执行脚本的 shell 中。同样的问题也发生在tcpdump
那里列出了捕获装置和捕获的数据包的数量,等等。
当然,我可以clear
在conntrack
ortcpdump
命令之后添加以快速隐藏输出,但该解决方案很难看。
如何隐藏这些类型的消息?
这些消息被打印为错误 (stderr) 而不是常规输出 (stdout)。
只有 stdout 被管道传输,而不是 stderr。因此,通过&> /tmp/file
在 grep 之后,您只是合并了grep
自身的 stdout 和 stderr 输出,它不会合并conntrack
对于您的示例,您可能需要以下内容:
conntrack -L 2>&1 | grep "dport=6439" > /tmp/file
Run Code Online (Sandbox Code Playgroud)
stderr 是文件描述符 2,stdout 是文件描述符 1。2>&1
将 stderr 合并到 stdout。
通过坚持2>&1
上conntrack
,然后将其输送到输出被合并grep
。没有必要在 上再次合并grep
。