Shell-Script

zsh:找不到命令時停止

  • August 10, 2021

我想在遇到命令未找到錯誤時停止執行 zsh 腳本。

我知道command_not_found_handler,但這個功能只允許我列印一條消息,而不是停止父 shell。

我正在尋找的功能類似於全域匹配失敗時:

echo nonexistent*
echo this will not be shown
zsh: no matches found: nonexistent*

您可以定義一個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.

引用自:https://unix.stackexchange.com/questions/664089