如何捕捉 /bin/bash: 错误的解释器错误

How to catch /bin/bash: bad interpreter error

最近在 运行 在 csh shell 中执行 bash 脚本时遇到了一个问题。这被输出:/bin/bash:错误的解释器:没有这样的文件或目录。问题是 bash 不在环境路径上。添加 bash 后,此问题已修复。我想确保将来,如果由于某种原因再次发生这种情况,我可以处理。我想知道这是什么退出代码?或者这只是在 stderr 上打印出来的?我想抓住这个并使主脚本失败。关于如何处理这个的任何想法?

我有这个片段:

bash sc142.sh

#####################################################################
# Check for processing errors
#####################################################################
if ($status != 0) then
    exit (-1)
endif

退出代码将为非零。确切的退出代码取决于环境。您可能会得到 127(未找到命令),但您也可能会在某些 shell 中得到另一个非零退出代码。

在您的 csh 脚本中,您可以设置 -e 选项,如果任何命令失败,该选项将导致脚本立即退出。

#!/bin/csh -e
false
echo not printed

我在 Debian 上试过,错误解释器错误的退出状态是 126。所以你可以这样做:

/path/to/scriptname arg ...
if ( $status == 126 ) then
    echo "scriptname failed"
    exit 1
endif

请注意,可能会出现误报。如果您 运行 脚本中的最后一个命令以状态 126 退出,您将无法区分。