たとえば、example.sh
次のような場合
. non-existing.sh
echo 'continues!'
その後、インタラクティブセッションからスクリプトをインポートし、. ./example.sh
端末に「続き!」と表示されたらどうなりますか?これ基準指定する
読み取り可能なファイルがないと、非対話型シェルは中断されます。対話型シェルは標準エラーに診断メッセージを記録する必要がありますが、この場合は構文エラーと見なすべきではありません。
セッションを続行する必要があるかどうかはわかりますが、入れ子になったソース. non-existing.sh
にどのように適用されるかはわかりません。 Bashはエラーメッセージを印刷しても実行されます(使用されていてもset -o posix
)。 Dashは現在のスクリプトを中断します(example.sh
)。これがBashがPOSIXと互換性がないのか、それともPOSIX(実装定義の動作)に指定されていないのか疑問に思います。
ベストアンサー1
読み取り可能なファイルがないと、非対話型シェルは中断されます
。
それ以外の場合は、[非対話型の場合]最後に実行されたコマンドの値を返します。https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#dot
2行目の引用符は、前のコマンドの終了コードが無視されることを示します。しかし、シェルをエラー終了モードに設定したいと思います。まあ、それをする必要があります。