私は 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
は==
で使用するには無効です[
(文字列の等価性は単一の でテストされます)。しかし、 をサポートする( をサポートする)=
シェルは、単一の括弧表記(例: 、 )も許可しているようです。上記のコードでは、[[
==
==
bash
ksh
ないbash ではエラーが発生するため、質問に再度タグを付けることを検討してください。