bash 'read'がステータス1で終了するのはなぜですか?

bash 'read'がステータス1で終了するのはなぜですか?

への答えから「BashスクリプトにSIGHUPが表示されませんか?」、私のスクリプトには次のものがあります。

while true; do read; done

そして通常、これは非常にうまく機能します。しかし、(tl;dr)...他のもので実行すると、ステータスreadコード1で終了します。

なぜ?この問題をどのように処理し、目的の動作(トラップを正しくトリガEXIT)に復元できますか?


(「他のもの」はGNUが作る走るアイルランドのct_run、これerlexec走るスクリプト)

答え1

readマニュアルページの文書にbashよると

ファイルの終わりが発生した場合、タイムアウトが発生したread場合(状態が128より大きい場合)、変数割り当てエラーが発生した場合(読み取り専用変数に割り当てられるなど)、無効なファイル記述子がない限り、終了状態は0です。引数として提供されます-u

あなたの場合、標準入力がファイルの終わりに達したようです。

許可しながら無期限に待機しようとしているので、CtrlC次のアプローチがより良いかもしれません。

while sleep 1; do :; done

これにより、I/O 処理に伴う予期せぬ状況を防ぎ、信号に適時に反応することができます。

関連情報