への答えから「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 処理に伴う予期せぬ状況を防ぎ、信号に適時に反応することができます。