带有 trap 和 stty -echo 的奇怪 Cygwin 终端行为

带有 trap 和 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!!
# ...

有人可以解释一下发生了什么事吗?

相关内容