web-dev-qa-db-ja.com

読み取りコマンドの呼び出し中にトラップ「ブレーク」が機能しない

私は学校のプロジェクトのためにこのbashで書かれた絞首刑執行人のゲームを持っています、そして現在私はしばらくループブレークのためにctrl-c exitコマンドを置き換えようとしています、それでユーザーは実際のゲームからカテゴリー選択メニューに戻ります。

私が現在使用しているコードは次のとおりです。

trap "break" SIGINT

そしてwhileループの内側:

read CHAR

ループ内でテキストが出力されているとき、およびsleepコマンドが実行されているときはすべて正常に機能しますが、アルゴリズムが読み取りコマンドのときに、ctrl-cを押すとコンソールに「^ C」と入力するだけです。

1
Marcos Rios

Bashがコマンドの完了を待機していて、トラップが設定されているシグナルを受信した場合、コマンドが完了するまでトラップは実行されません。

これが、readが中断されない理由です。

^Cは、echoctlの設定により、シェルではなく端末によって出力されます。 stty -echoctlを実行すると、表示されません。

3
Hauke Laging