zsh:未找到命令时停止

zsh:未找到命令时停止

我想在遇到命令未找到错误时停止 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

相关内容