Fish Shell:
エラー処理
どのように:
Fishでエラーをキャッチするには、status
コマンドと条件式を使用します。例えばping
が失敗した場合、その検出方法は以下の通りです:
ping -c 1 example.com
if not status is-success
echo "Something fishy happened with the ping."
end
ping
が失敗した場合のサンプル出力:
Something fishy happened with the ping.
特定のエラーコードを処理するには、status --is
を使用します:
false
if status --is 1
echo "Caught an error with code 1."
end
サンプル出力:
Caught an error with code 1.
より堅牢なアプローチを考える場合は、関数の使用を検討してください:
function try_ping
ping -c 1 example.com
or begin
echo "Ping failed with status $status"
return 1
end
end
try_ping
詳細な検討
Fishでのエラー処理は、高級言語で知られるtry/catch
パラダイムには合いません。代わりに、status
コマンドによって提供されるシンプルな終了ステータスを使用します。
歴史的に、Unix系システムでは、終了ステータスが0
であれば成功を意味し、非ゼロ値はエラーを示します。これは様々な失敗の理由を反映していることが多く、ほとんどのコマンドラインユーティリティーによって使用されているため、Fish自体にも採用されています。
Fishでのstatus
チェックに代わる方法としては、他のシェルでのシグナル処理によるtrap
がありますが、Fishは副作用が少なく、より明確なステータスチェックを好みます。
実装に関しては、Fishでのエラー処理は、ブロックしない性質と明確な構文への重点に大きく貢献され、例で示されたようにシンプルでありながら強力です。エラーコードは関数とうまく組み合わせることができ、モジュール化され読みやすいエラー管理を可能にします。
参考情報
- Fishの条件文に関するドキュメント:https://fishshell.com/docs/current/language.html#conditionals
- Fishにおけるエラー処理のチュートリアル:https://fishshell.com/docs/current/tutorial.html#error-handling