CentOS 5.3,Perl,bash命令,隐藏所有输出到屏幕

我正在运行以下命令:

[user@server ~]$ /usr/sbin/ntpdate -d IPREMOVEDFORSECURITY | egrep 'transmit timestamp' | tail -1 | awk '{print $4, $5, $6, $7, $8}' host found : HOSTREMOVEDFORSECURITY Tue, Feb 15 2011 12:38:38.321 

所以问题是,无论我使用哪种types的redirect,我总是会得到“主机find:”行。 我已经尝试了以下内容:

 0>/dev/null 1>/dev/null 2>/dev/null 2>&1 2>&/dev/null 

还有其他所有的变化我都能想到,或者能够在网上find。 所有我需要和要返回的是该命令输出的第二行(时间戳)。 我不明白为什么我似乎无法影响“主机find:”行?!?!

我通过Perl运行这些命令,但是我看到相同的行为,直接在bash中运行它们。 我需要禁止该主机:行,因为在Perl中,我正在运行命令使用反引号分配输出到一个variables,并输出干净的响应基于其他条件。 无论如何,该主机行显示和泥浆我的脚本的输出,但它并不影响实际分配给variables。

我的假设是这条线不使用正常的STDIN,STDOUT,STDERR线程,但我似乎无法在第四个输出方法上固定任何特定的信息。 我find的每个网站都只是谈论这三个。

如果有人有这个答案,请请让我知道!

PS:这不是唯一的显示这种行为的命令,chkconfig和其他一些人也这样做,我真的想弄清楚如何抑制这种不必要的输出。

ntpdate正在打印“主机find”标准错误,其他所有内容都是标准输出。 这将redirect到标准输出:

 /usr/sbin/ntpdate -d localhost 2>&1 | egrep 'transmit timestamp' 2>/dev/null | \ tail -1 | awk '{print $4, $5, $6, $7, $8}' 

然后egrep删除“主机find”行,因为它不匹配。

我认为你的困惑可能来自把redirect放在pipe道的末端而不是在pipe道内。 你必须find命令打印额外的数据到stderr(在这个例子中是ntpdate),并在那个点执行之前 ,redirect或者压制stderr。