我的Bash版本是: GNU bash, version 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
退出这个脚本,我的terminal就不能正常工作了。
user@host:~/bin$ user@host:~/bin$ user@host:~/bin$ user@host:~/bin$No command 'aaaa' found, did you mean...
一切都写到同一行,我的打字没有回应。 我使用腻子进行这些连接。 当我再次连接到主机everyting正在重新工作。
只有在某些条件成立的情况下才会出现此问题:只有在使用sudo
运行时 普通用户和root用户(使用sudo -s
成为root)可以毫无问题地退出脚本。
此问题仅在第二个读取语句中存在。 读取pass1
variables时退出pass1
导致麻烦。
可能是这个问题的原因是什么?
重置您的终端应该有所帮助。 read -s
正在改变某些设置以隐藏输入,并且在某些情况下这些设置在接收到中断信号后不会恢复。 将此行添加到脚本的开头,以确保您的脚本将终端重置为良好的状态:
trap 'stty sane' INT
正如User112638726所指出的那样,您应该将脚本的状态保存在脚本的开始部分,然后恢复(而不是假设原始状态与理解产生的相同)。
original_tty_state=$(stty -g) trap "stty $original_tty_state" INT