私は現在Debianパッケージを閲覧しており、いくつかのコード例を読んでいます。たとえば、postinst
スクリプトの各行はパターンです。
some command || true
another command || true
したがって、一部のコマンドが失敗した場合、その行はtrueを返しますが、これがプログラムの出力にどのような影響を与えるかはわかりません。
答え1
このパターンの理由は、Debianパッケージのメンテナスクリプトがで始まる傾向があるためですset -e
。これにより、すべてのコマンド(厳密にはパイプ、リスト、または複合コマンド)がゼロ以外の状態で終了するとすぐにシェルが終了します。これはエラーを蓄積しません。問題が発生するとすぐにスクリプトがハングします。
スクリプトのコマンドが失敗する可能性がある場合、追加すると|| true
生成された複合コマンドは常にステータス0で終了するため、スクリプトは中断されません。たとえば、ディレクトリを削除することは致命的なエラーではありません(パッケージが削除されるのを防ぎます)。
rmdir ... || true
rmdir
エラーを無視するように指示するオプションがないためです。
答え2
実行したばかりのプログラムの出力には影響しませんが、呼び出し側は将来のロジックに影響を与えず、すべてが正常であるかのように続行できます。
言い換えれば、エラーをマスクします。状態前のコマンドの
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