在bash
脚本中,我使用conntrack
和等工具tcpdump
将结果输出到文件,但希望在执行命令/脚本后隐藏命令行第一个输出行上显示的标准消息。
信息:
conntrack v1.0.0 (conntrack-tools): 6 flow entries have been shown.
阅读bash
手册页后,我尝试过以下操作:
conntrack -L|grep "dport=6439" &> /tmp/file
无论我尝试什么重定向选项,conntrack
说明流条目数的消息始终显示在我执行脚本的 shell 中。同样的情况也适用于tcpdump
列出捕获设备和捕获的数据包数量等的地方。
当然,我可以在or命令clear
后面添加以快速隐藏输出,但该解决方案很丑陋。conntrack
tcpdump
如何隐藏此类消息?
答案1
这些消息被打印为错误(stderr)而不是常规输出(stdout)。
只有 stdout 被传送,而不是 stderr。因此,通过&> /tmp/file
在 grep 之后,您仅合并其自身的 stdout 和 stderr 输出grep
,而不会合并其 stderrconntrack
对于您的示例,您可能想要类似的东西:
conntrack -L 2>&1 | grep "dport=6439" > /tmp/file
stderr 是文件描述符 2,stdout 是文件描述符 1。2>&1
将 stderr 合并到 stdout。
通过坚持2>&1
,conntrack
输出在通过管道传输到 之前会被合并grep
。无需再次合并grep
。