忽略 setenv 命令中的错误并继续进一步执行 csh 脚本



我有一个包含一组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'执行。

相关内容

最新更新