gpt4 book ai didi

linux - BASH:输入期间的 Ctrl+C 会中断当前终端

转载 作者:太空狗 更新时间:2023-10-29 11:36:32 26 4
gpt4 key购买 nike

我的 Bash 版本是:GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)

我有一段代码是这样的:

   while true; do
echo -n "Set password: "
read -s pass1
printf "\n"
echo -n "Repeat password: "
read -s pass2
printf "\n"
if [ $pass1 != $pass2 ]; then
echo "Not same."
else
break
fi
done

如果我在读取 pass2 时使用 ctrl+c 退出此脚本,我的终端将停止正常工作。

user@host:~/bin$ user@host:~/bin$ user@host:~/bin$ user@host:~/bin$No command 'aaaa' found, did you mean...

所有内容都写入同一行,我的输入没有回显。我使用 Putty 进行这些连接。当我再次连接到主机时,一切都恢复正常了。

此问题仅在某些条件为真时出现:仅当使用 sudo 运行时。普通用户和 root(通过 sudo -s 成为 root)都可以毫无问题地退出脚本。

此问题仅在第二次读取语句期间存在。在读取 pass1 变量时退出不会造成任何问题。

这个问题可能是什么原因造成的?

最佳答案

重置您的终端应该会有帮助。 read -s 正在更改某些设置以隐藏输入,在某些情况下,这些设置在收到中断信号后不会恢复。将此行添加到脚本的开头以确保您的脚本将终端重置为良好状态:

trap 'stty sane' INT

正如 User112638726 所指出的,您应该在脚本开头保存终端的状态,然后恢复它(而不是假设原始状态与 sane 生成的状态相同)。

original_tty_state=$(stty -g)
trap "stty $original_tty_state" INT

关于linux - BASH:输入期间的 Ctrl+C 会中断当前终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com