立即捕获并非所有环境变量都已在qsub命令行中定义

时间:2014-04-28 16:01:31

标签: bash pbs

我使用qsub提交pbs作业。我的作业文件需要定义5个环境变量:qsub -v A=foo,B=bar,C=cat,D=dog,E=qux jobfile.sh。有时,我可能会忘记在命令行中定义其中一个变量,以便稍后提交以查找我的错误。

那么,有没有一种方法可以捕获在使用qsub提交时未定义所有环境变量的条件?或者我是否必须接受在提交包含许多必需环境变量的作业文件时必须非常小心?

谢谢,

2 个答案:

答案 0 :(得分:3)

您可以做的最好的事情是在jobfile.sh的开头添加一个运行时检查,如果没有设置任何预期的变量,它将导致它退出。

set -u
: $A $B $C $D $E
set +u
如果尝试扩展未设置的参数,

set -u会告诉shell退出。 :命令不执行任何操作,但其参数首先进行标准扩展,因此如果未设置任何五个,则shell将退出。 set +u然后禁用shell的其余部分的unset-parameter检查。

qsub本身无法检查给定的作业以确定它可能需要哪些变量。

答案 1 :(得分:3)

我非常喜欢@Chepner答案的简洁,但是如果你不想摆弄set -/+u,那么你可以用类似的方式使用这个shell parameter expansion

: ${A?} ${B?} ${C?} ${D?} ${E?}

如果未设置任何变量,那么您将收到类似这样的错误,并且脚本将立即退出:

./jobfile.sh: line 3: A: parameter null or not set

或者,您可以使用您自己的错误消息覆盖默认错误消息:

${A?Your message here}

来自manual

${parameter:?word}
     

如果参数为null或未设置,则单词的扩展(如果不存在单词,则为该效果的消息)将写入标准错误,如果不是交互式,则退出shell。否则,参数的值将被替换。