我有一个包含setenv命令集的文件(从另一个脚本生成)。
a.csh
setenv XYZ "${ABC} ab"
setenv PQR "test"
然后我在Linux终端中运行
source a.csh
但是,如果未设置变量$ ABC,则源错误将使用 undefined variable ABC出现,并在不运行a.csh中的下一组命令的情况下退出(如
setenv PQR "test"
)。我希望在
setenv XYZ "${ABC} ab"
之后继续执行这些命令集。我尝试为setenv命令添加错误重定向,但是没有用
setenv XYZ "${ABC} ab" 2 > /dev/null
我发现可以使用捕获源命令的错误
source a.csh & echo $?
但这将忽略文件中紧随该错误的命令,因为它在遇到该错误时会退出该命令。
这是我的csh文件看起来的一个小例子。
但是它可能包含一整套setenvs。
检查$ ABC是否存在然后运行setenv是不可行的。
最佳答案
我发现与此最接近的解决方法是,如果setenv的值包含变量,则生成如下的setenvs。[ "$?ABC" == "0" ] && echo 'Undefined $ABC' || setenv XYZ "$ABC aa"
无法避免检查变量是否存在。
但不要求是否阻塞并使其成为一个衬板。
说明:
如果 undefined variable $ ABC,则$?ABC
返回0。
如果定义了变量,则[ "$?ABC" == "0" ]
为,为假,强制执行||。健康)状况。
在A && B
之类的条件下,仅当A为true(基本&&行为)时才执行B。
如果 undefined variable ABC ,则[ "$?ABC" == "0" ]
为 true ,并在&&
之后执行代码echo 'Undefined $ABC'
。
关于shell - 忽略setenv命令中的错误,并继续执行csh脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59854739/