shell - 忽略setenv命令中的错误,并继续执行csh脚本

标签 shell unix error-handling tcsh setenv

我有一个包含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/

相关文章:

第二次无法处理浮点异常(FPE)

error-handling - 如何使用/informational标志捕获IDL “message”

javascript - 检测和终止缓慢的第三方 javascript 请求

python - 获取错误详细信息,例如 'openerp application error details'

bash - "sh runMyCode.sh"不以 "for n in {10..99}"格式循环

linux - Bash 脚本 : $x=$x+2 is not getting recognised

linux - 在 bash 中使用 sed 覆盖同一个文件

linux - 运行存储过程的简单 bash Linux 脚本

linux shell sed命令

linux - 如何在 bash 的目录组中列出具有特定字符串的文件?