Linux/Unix脚本-几行中最奇怪的行为-变量集但为空

Linux/Unix脚本-几行中最奇怪的行为-变量集但为空,linux,scripting,environment-variables,pvm,Linux,Scripting,Environment Variables,Pvm,我可以告诉你这是我很久以来看到的最疯狂的事情 我在CentOS 5.4上运行了sh脚本的这一部分: # Check GOLD_DIR` echo $GOLD_DIR"<--" #export GOLD_DIR=/share/apps/GOLD_Suite/GOLD <uncommenting this line works!! if [ "X$GOLD_DIR" = "X" ] ; then echo "ERROR: GOLD_DIR is (probably) not set

我可以告诉你这是我很久以来看到的最疯狂的事情

我在CentOS 5.4上运行了sh脚本的这一部分:

# Check GOLD_DIR`
echo $GOLD_DIR"<--"
#export GOLD_DIR=/share/apps/GOLD_Suite/GOLD <uncommenting this line works!!
if [ "X$GOLD_DIR" =  "X" ] ; then
  echo "ERROR: GOLD_DIR is (probably) not set on host ${HostName}" >> ${3}
  exit 1
fi
这将产生以下输出:

/share/apps/GOLD_Suite/GOLD<-- 
Waiting for 5 seconds ..... Testing output

The test script did spawn a job (i.e. PVM ran OK), 
but errors were detected in the test script output 
on the host machine: Below is the output

ERROR: GOLD_DIR is (probably) not set on host xxx.yyy.local

正如您可以看到的那样,设置了GOLD_DIR变量,脚本通过postfix的输出找到它,因此设置了var。如果只导出GOLD_DIR而不是注释行,而不设置值,它会工作吗


还有。这是一个孤立的案例?是在CentOS上的bash吗?试着用[[]]来检查什么地方出了问题。

我认为这可能与工作的非互动性有关。从shell脚本运行的作业不一定是source/etc/profile,因此它们可能不会拾取您的${GOLD_DIR}变量。除非您明确更改了它的行为,否则bash将只为登录shell提供源代码/etc/profile

尝试添加:

. /etc/profile

在脚本的开头,只是为了看看这是否会改变什么。如果没有,则在回显错误语句时,在某处添加${GOLD_DIR},以查看该语句中的变量是否仍然可用。

No它不起作用。如果我在您的语句之后立即执行回显,我可以看到变量内容,但仍然会得到错误:。。。我正在使用bash,但是脚本shbang是/宾/什。我改成了[[],而不是[],我仍然得到了应得的惩罚error@MalteseUnderdog:所以它可能是一个可变值的东西。。。你能试着在上面写上declare-p吗?也许这有点可疑。如果将工作导出GOLD_DIR=blabla拆分为分配,然后导出,它会改变什么吗?还可以尝试POSIX模式,如POSIXLY_CORRECT envvar中的模式。如果您将条件更改为[-z$GOLD_DIR],它会工作吗?