【发布时间】:2015-12-29 12:19:40
【问题描述】:
如果一行返回非零结果,我过去使用的每个系统都会继续我的简单 bash 脚本。一些新的 Ubuntu LTS 14.x 系统现在在第一次失败时退出。我用过
echo $-
并且 e 没有出现在列表中。我还应该寻找什么?
从评论中添加:
$ declare -f command_not_found_handle
command_not_found_handle ()
{
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1";
return $?;
else
if [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1";
return $?;
else
printf "%s: command not found\n" "$1" 1>&2;
return 127;
fi;
fi
}
【问题讨论】:
-
declare -f command_not_found_handle有输出吗? -
是的,结果如预期我相信
command_not_found_handle () { if [ -x /usr/lib/command-not-found ]; then /usr/lib/command-not-found -- "$1"; return $?; else if [ -x /usr/share/command-not-found/command-not-found ]; then /usr/share/command-not-found/command-not-found -- "$1"; return $?; else printf "%s: command not found\n" "$1" 1>&2; return 127; fi; fi } -
因此,如果您尝试使用任何无法找到的命令,而这些脚本中的任何一个都返回非零值或找不到这些脚本时,您的脚本将退出。您的脚本以什么退出代码退出?在剧本中的哪一点?
set -x向您展示了什么? -
您还可以查看是否设置了 ERR 陷阱。这应该出现在
set -x。 -
顺便说一句,不确定您所说的“在 ENV 中”是什么意思。
-e标志不是环境的一部分。