在 Shell 脚本中隐藏命令消息

Joh*_*n B 2 shell bash

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那里列出了捕获装置和捕获的数据包的数量,等等。

当然,我可以clearconntrackortcpdump命令之后添加以快速隐藏输出,但该解决方案很难看。

如何隐藏这些类型的消息?

Dav*_*man 6

这些消息被打印为错误 (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>&1conntrack,然后将其输送到输出被合并grep。没有必要在 上再次合并grep