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

Shell 忽略setenv命令中的错误并继续进一步执行csh脚本,shell,unix,error-handling,tcsh,setenv,Shell,Unix,Error Handling,Tcsh,Setenv,我有一个包含一组setenv命令(由另一个脚本生成)的文件 a.csh 然后我在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.cs

我有一个包含一组setenv命令(由另一个脚本生成)的文件

a.csh

然后我在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文件的一个小例子。 但它可以包含一长串setenv


检查$ABC是否存在,然后运行setenv是不可行的。

我找到的最接近的解决方法是,如果setenv的值包含变量,则生成setenv,如下所示

[“$?ABC”==“0”]&回显“未定义的$ABC”| | setenv XYZ“$ABC aa”

无法避免检查变量是否存在
但不需要if-else阻塞并使其成为一个单衬里

说明:
$?如果未定义变量$ABC,则ABC
返回0

如果变量定义为
[“$?ABC”==“0”]
则为false强制执行| |条件。
在像
a和&B
这样的条件下,仅当a为真时才执行B(基本和行为)

如果变量ABC未定义
[“$?ABC”==“0”]
true,并且执行
&
后的代码
回显“未定义的$ABC”

setenv XYZ "${ABC} ab"
setenv PQR "test"