我有一个包含一组setenv命令的文件(从另一个脚本生成(。
A.csh
setenv XYZ "${ABC} ab"
setenv PQR "test"
然后我在 Linux 终端中运行source a.csh
但是,如果未设置变量 $ABC,则源错误并带有未定义的变量 ABC 并退出而不运行 a.csh 中的下一组命令(如setenv PQR "test"
(。
我希望在setenv XYZ "${ABC} ab"
之后继续执行这组命令。
我尝试为 setenv 命令添加错误重定向,但没有工作
setenv XYZ "${ABC} ab" 2 > /dev/null
我发现可以使用捕获源命令的错误
source a.csh & echo $?
但这将忽略文件中跟随有错误的命令的命令,因为它在遇到错误时退出命令。
这是我的csh文件外观的一个小例子。 但它可以包含一长串的设置。
检查$ABC是否存在,然后运行setenv是不可行的。
我为此找到的最接近的解决方法是生成setenvs,如果setenv的值包含变量,则如下所示。
[ "$?ABC" == "0" ] && echo 'Undefined $ABC' || setenv XYZ "$ABC aa"
无法避免检查变量是否存在。
但不需要其他阻塞并使其成为一个衬里。
说明:
如果未定义变量 $ABC,$?ABC
返回 0。
如果定义了变量[ "$?ABC" == "0" ]
则为false,则强制执行 || 条件。
在像A && B
这样的条件下,B只有在A为真时才被执行(基本&&行为(。
如果变量ABC未定义[ "$?ABC" == "0" ]
为true,则&&
后面的代码echo 'Undefined $ABC'
执行。