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" 服务器,它将像往常一样显示更多信息,例如:
- 进入CT
- 打开/dev/pts/0
这就像它在解析有关它正在做的事情的额外信息。
当然,以上内容纯粹是装饰性的,但是对于我们使用的几个 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 的反应有点失望。这是此后他第二次对他的回应非常冷漠和粗鲁。他显然没有正确阅读我发布的问题。好吧。
好的,希望我能正确解释这个问题,因为我不知道是什么原因造成的,也不知道如何解决这个问题。
出于某种原因 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" 服务器,它将像往常一样显示更多信息,例如:
- 进入CT
- 打开/dev/pts/0
这就像它在解析有关它正在做的事情的额外信息。
当然,以上内容纯粹是装饰性的,但是对于我们使用的几个 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 的反应有点失望。这是此后他第二次对他的回应非常冷漠和粗鲁。他显然没有正确阅读我发布的问题。好吧。