Shell-Script
zsh:找不到命令時停止
我想在遇到命令未找到錯誤時停止執行 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
.