"command || true" パターンはなぜ役に立ちますか?

私は現在Debianパッケージを閲覧しており、いくつかのコード例を読んでいます。たとえば、postinstスクリプトの各行はパターンです。

some command || true
another command || true

したがって、一部のコマンドが失敗した場合、その行はtrueを返しますが、これがプログラムの出力にどのような影響を与えるかはわかりません。

ベストアンサー1

このパターンの理由は、Debianパッケージのメンテナスクリプトがで始まる傾向があるためですset -e。これにより、すべてのコマンド(厳密にはパイプ、リスト、または複合コマンド)がゼロ以外の状態で終了するとすぐにシェルが終了します。これはエラーを蓄積しません。問題が発生するとすぐにスクリプトがハングします。

スクリプトのコマンドが失敗する可能性がある場合、追加すると|| true生成された複合コマンドは常にステータス0で終了するため、スクリプトは中断されません。たとえば、ディレクトリを削除することは致命的なエラーではありません(パッケージが削除されるのを防ぎます)。

rmdir ... || true

rmdirエラーを無視するように指示するオプションがないためです。

おすすめ記事