在 Shell 脚本中隐藏命令消息

在 Shell 脚本中隐藏命令消息

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后面添加以快速隐藏输出,但该解决方案很丑陋。conntracktcpdump

如何隐藏此类消息?

答案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>&1conntrack输出在通过管道传输到 之前会被合并grep。无需再次合并grep

相关内容