【发布时间】:2015-08-04 12:04:04
【问题描述】:
我的 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 退出此脚本,我的终端将停止正常工作。
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 变量时退出不会有任何问题。
这个问题的原因可能是什么?
【问题讨论】:
-
这可能与修改当前终端设置的
-s选项有关。尝试在 while 循环之前添加trap 'stty sane' INT,以便在您键入 Ctrl-C 后,shell 将在实际退出之前尝试修复您的终端。 -
这似乎有效。我现在可以退出脚本,即使是 sudo 也没有问题。
-
您可能也对this answer 感兴趣,以解决我遇到的类似问题。