Bash 命令输出额外信息,导致脚本出现问题

Bash commands putting out extra information which results into issues with scripts

好的,希望我能正确解释这个问题,因为我不知道是什么原因造成的,也不知道如何解决这个问题。

出于某种原因 bash 命令(在 CentOS 6.x 服务器上)显示的信息比 "normally" 多,这会导致某些脚本出现问题。我不知道是否有这个名称,但希望有人知道解决方案。

第一个例子。

正确/良好的服务器:

[root@goodserver ~]# vzctl enter 3567
entered into CT 3567
[root@example /]#

(这是正确的行为)

不正确/错误的服务器:

[root@badserver /]# vzctl enter 3127
Entering CT
entered into CT 3127
Open /dev/pts/0
           [root@example /]#

使用 "bad" 服务器,它将像往常一样显示更多信息,例如:

这就像它在解析有关它正在做的事情的额外信息。

当然,以上内容纯粹是装饰性的,但是对于我们使用的几个 bash 脚本,这些问题确实是问题。

我们使用的脚本的一部分,使用了如下命令(还有很多,但这主要是错误的例子):

 DOMAIN=`vzctl exec $VEID 'hostname -d'`

以上信息的解析结果在/etc/named.conf.

GOOD 服务器上,它将像这样添加到 named.conf 中:

zone "example.com" {
    type master;
    file "example.com";
    allow-transfer {
            200.190.100.10;
            200.190.101.10;
            common-allow-transfer;
    };
};

以上正确。

BAD 服务器上,它将像这样添加到 named.conf 中:

zone "Executing command: hostname -d
example.com" {
    type master;
    file "Executing command: hostname -d
example.com";
    allow-transfer {
            200.190.100.10;
            200.190.101.10;
            common-allow-transfer;
    };
};

所以它添加了它所做的操作的东西,在这个例子中 "Executing command: hostname -d"

这里的另一个例子是我 运行 在好的服务器和坏的服务器上的命令。

错误的服务器:

[root@bad-server /]# DOMAIN=`vzctl exec 3333 'hostname -d'`
[root@bad-server /]# echo $DOMAIN
Executing command: hostname -d example.com

好的服务器:

[root@good-server ~]# DOMAIN=`vzctl exec 4444 'hostname -d'`
[root@good-server ~]# echo $DOMAIN
example.com

我的知识有限,但我尝试了一些检查 rsyslog 和 grub.conf 的东西,但似乎没有什么异常。

我不知道为什么要显示额外的信息。

可能是一些简单/愚蠢的事情,但我已经尝试解决这个问题好几个小时了,我真的一点头绪都没有...

非常感谢任何帮助。

补充信息: 两台服务器都使用:kernel.printk = 7 4 1 7 (不知道有没有用)

我会确保正确解析命令的输出。在这种情况下,我们只对

形式的行感兴趣
entered into CT 12345

这样做的一种方法是将所有内容都通过 sed 进行管道传输,并让 sed 仅在行如上所示时打印数字(未经测试,我总是忘记哪个 braces/brackets/parens 前面需要一个反斜杠):

whateverthecommand | sed -n 's/^entered into CT ([0-9]{1,})$//p'

好吧(感谢 Aaron 为我指明了正确的方向)我终于找到了导致我在使用此脚本时遇到的所有问题的小罪魁祸首(它适用于所有其他服务器,因此显然不需要更改它).

这些问题是由 vz.conf(位于 /etc/vz/ 目录)中设置的 VERBOSE leven 引起的。那里有一个名为 "VERBOSE" 的选项,在我的例子中它被设置为 3.

根据 OpenVZ 的网站,它执行以下操作:

Increments logging level up from the default. Can be used multiple times. 
Default value is set to the value of VERBOSE parameter in the global
configuration file vz.conf(5), or to 0 if not set by VERBOSE parameter.

在我将 VERBOSE=3 更改为 VERBOSE=0 之后,我的脚本再次正常运行(就像其他所有服务器一样)。 :-)

非常感谢 Aaron 为我指明了正确的方向。当您知道在哪里寻找时,答案很简单!



很抱歉,但我对 ndim 的反应有点失望。这是此后他第二次对他的回应非常冷漠和粗鲁。他显然没有正确阅读我发布的问题。好吧。