トラップとstty -echoを使用した奇妙なCygwin端末の動作

トラップとstty -echoを使用した奇妙なCygwin端末の動作

コマンド中に+を使用してスクリプトを終了すると、Ctrlモードは中断されます。 (私はWindows 10でCygwin端末を使用しています。)Cread ...stty -echo

残念ながら、read -sループ内で呼び出されると「ゆっくり」反応するため、問題は解決されません。 (一部の入力が表示されることがあります。)

#!/usr/bin/env bash

trap 'stty echo && exit' SIGINT
stty -echo
read -n 1 input # pressing Ctrl+C here!!
# ...

しかし、-n 1期待通りに仕事をやめれば、次のようになります。

#!/usr/bin/env bash

trap 'stty echo && exit' SIGINT
stty -echo
read input # pressing Ctrl+C here!!
# ...

何らかの理由で、これは期待どおりに機能します。

#!/usr/bin/env bash

while getopts k flag; do
  case "${flag}" in
  k) do_read="true" ;;
  esac
done

if [[ $do_read != "true" ]]; then
  # just restarting
  "$0" -k && stty echo
  exit
fi

trap 'echo exiting && exit' SIGINT
stty -echo
read -n 1 input # pressing Ctrl+C here!!
# ...

何が起こっているのかを説明できる人はいますか?

関連情報