我想在遇到命令未找到错误时停止 zsh 脚本运行。
我知道command_not_found_handler
,但这个函数只允许我打印一条消息,而不能停止父 shell。
我正在寻找的功能类似于全局匹配失败时的功能:
echo nonexistent*
echo this will not be shown
zsh: no matches found: nonexistent*
答案1
您可以定义一个ZERR
陷阱获得比set -e
允许的更精细的控制。按照惯例,退出状态127是为命令未找到错误而保留的。
trap 'if (($? == 127)); then exit 127; fi' ZERR
这与 具有相同的警告set -e
。特别是,它不会在诸如 之类的条件内部触发if no_such_command; …
。并且它只能从当前子shell退出,而不能从原始shell退出(但如果适用的话,它会触发父shell的ZERR陷阱)。
我很难想象在什么情况下您所要求的行为是可取的。使用set -e
。对于预计会失败的特定命令,请追加|| true
。