スクリプトのコマンドの 1 つでエラーが発生すると何が起こりますか?

スクリプトのコマンドの 1 つでエラーが発生すると何が起こりますか?

私は alien を使用して RPM を .deb に変換しました。私は alien のスクリプト変換を使用しておらず、手動で変換しています。確かに、スクリプトは互換性のない構文でエラーを起こしました。私の質問は、この非互換性を修正する方法ではなく、エラーが発生してもスクリプトが正常に実行され続ける方法についてです。

問題のある部分は次のとおりです。

if [ "`/bin/echo '\c'`" == "" ]; then
   ECHO_ESC="/bin/echo"
else
   ECHO_ESC="/bin/echo -e"
fi

これにより、次の「エラー」が発生します。

./avsetup_mcc: 11: [: \c: unexpected operator

それにもかかわらず、スクリプトは完璧に実行され続けます。では、ここで何が起こっているのでしょうか?

答え1

[は「特別な組み込み」ではなく、POSIXUtility syntax error (option or operand error)非特殊組み込みのShall not exit非対話型シェル (「スクリプト」) 。

シェルが終了しない理由については以上です。スクリプトは、ブランチがECHO_ESCどうなっても正常な状態に設定されているため、完璧に機能しますif

エラーメッセージが示唆するのとは異なり、エラーは からではなく から来ています。\c==で使用するには無効です[(文字列の等価性は単一の でテストされます)。しかし、 をサポートする( をサポートする)=シェルは、単一の括弧表記(例: 、 )も許可しているようです。上記のコードでは、[[====bashkshないbash ではエラーが発生するため、質問に再度タグを付けることを検討してください。

関連情報