私は現在Debianパッケージを調査しており、いくつかのコードサンプルを読んでいます。たとえば、すべての行で、postinst
スクリプトはパターンです。
some command || true
another command || true
したがって、一部のコマンドが失敗した場合、行はtrueを返しますが、これがプログラムの出力にどのように影響するかはわかりません。
このパターンの理由は、Debianパッケージのメンテナースクリプトがset -e
で始まる傾向があるため、コマンド(厳密には、パイプライン、リスト、または複合コマンド)がゼロ以外で終了するとすぐにシェルが終了するためです。状態。これにより、エラーが蓄積されなくなります。問題が発生するとすぐにスクリプトが中止されます。
スクリプト内のコマンドの失敗が許可されている場合、|| true
を追加すると、結果の複合コマンドが常にステータス0で終了するため、スクリプトは中止されません。たとえば、ディレクトリの削除は致命的なエラーではありません(パッケージが削除されないようにすること)。だから私たちは
rmdir ... || true
rmdir
には、エラーを無視するように指示するオプションがないためです。
プログラムの出力には影響を与えませんが、実行するだけです。つまり、呼び出し側は、すべてが大丈夫であるかのように続行できるため、将来のロジックに影響を与えます。
言い換えると、前のコマンドのエラーstatusがマスクされます。
michael@x071:[/usr/sbin]cat /tmp/false.sh
#!/bin/sh
false
michael@x071:[/usr/sbin]cat /tmp/true.sh
#!/bin/sh
false || true
michael@x071:[/usr/sbin]sh /tmp/false.sh; echo $?
1
michael@x071:[/usr/sbin]sh /tmp/true.sh; echo $?
0