这个让我挠头。我有一个bash脚本我试图作为一个nagios插件运行。
从命令行一切都很好但是在nagios下运行时会采取错误的执行路径。在这种情况下,nagios服务器是我的本地盒子。
这是脚本中出现问题的地方。它有点简化但不多。样品:
# at the start of the script
threshold_type="above"
# then later on..
check_thresholds() {
if [ "$threshold_type" == "above" ]; then
method_1
else
method_2
fi
}
调用check_thresholds
时,method_2
会在nagios下运行。从命令行运行(相同的参数,我发誓)method_1
被调用。可能会发生什么想法?我应该以不同方式检查字符串比较吗?
[编辑]我愚蠢地忽略了提到命令行是从Mac OSX运行的,而nagios服务器是盒子上的Ubuntu VM。
答案 0 :(得分:2)
if [ "$threshold_type" == "above" ]
是[
/ test
和==
的混合,是bash扩展名。其他shell不支持==
。要使此脚本更具可移植性,您应该使用:
if [ "$threshold_type" = "above" ]
Bash在==
和[
构造中支持[[
,但=
是符合POSIX(正确)的方式进行比较。