コマンドが見つかりませんエラーが発生したときに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
。