zsh:コマンドが見つからない場合は停止

zsh:コマンドが見つからない場合は停止

コマンドが見つかりませんエラーが発生したときにzshスクリプトの実行を停止したいと思います。

わかりましたcommand_not_found_handler。ただし、この機能を使用するとメッセージのみを印刷でき、親シェルを停止することはできません。

私が探している機能は、グローバル一致が失敗したときに発生する機能と似ています。

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; …。そして、元のシェルではなく現在のサブシェルでのみ終了できます(ただし、該当する場合は親シェルのZERRトラップをトリガーします)。


あなたが要求する行動が望ましい状況を想像することは困難です。使用set -e。失敗すると予想される特定のコマンドの場合|| true

関連情報