Mad*_*rin 2 linux bash shell terminal
我的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
Run Code Online (Sandbox Code Playgroud)
如果我退出此脚本ctrl+c同时在线上阅读pass2我的终端停止正常工作.
user@host:~/bin$ user@host:~/bin$ user@host:~/bin$ user@host:~/bin$No command 'aaaa' found, did you mean...
Run Code Online (Sandbox Code Playgroud)
一切都写到同一行,我的打字没有回应.我使用Putty进行这些连接.当我再次连接到主机时,每个人都在重新工作.
仅当某些条件为真时才会出现此问题:仅在运行时才出现此问题sudo.普通用户和root(成为root用户sudo -s)都可以毫无问题地退出脚本.
此问题仅在第二个读取语句中存在.读取pass1变量时退出不会造成任何麻烦.
这个问题可能是什么原因?
重置您的终端应该有所帮助.read -s正在更改某些设置以隐藏输入,在某些情况下,这些设置在收到中断信号后不会恢复.将此行添加到脚本的开头,以确保您的脚本将终端重置为良好状态:
trap 'stty sane' INT
Run Code Online (Sandbox Code Playgroud)
正如User112638726所指出的,您应该在脚本开头保存终端的状态,然后恢复(而不是假设原始状态与sane产生的状态相同).
original_tty_state=$(stty -g)
trap "stty $original_tty_state" INT
Run Code Online (Sandbox Code Playgroud)