中断后终端输入隐藏 'read -s'
Terminal input hidden after interrupting 'read -s'
在等待操作 read -sp
的输入时按 Ctrl-C returns 操作返回到命令行,但给定的输入被隐藏,就像它仍然是 运行 read -s
.
例子
#!/bin/sh
sig_handler() {
echo "SIGINT received"
exit 1
}
trap "sig_handler" SIGINT
read -sp "ENTER PASSWORD: " password
echo
echo $password
正常执行如下:
$~ ./example.sh
ENTER PASSWORD:
password
$~ text
-bash: text: command not found
但如果您在输入密码时按 Ctrl-C,您会得到
$~ ./example.sh
ENTER PASSWORD: SIGINT received
$~ -bash: text: command not found
在使用 reset
刷新之前,文本或任何其他后续命令不会显示为输入。
如何在收到SIGINT后return文本正常输入?出于明显的安全原因,read -p "ENTER PASSWORD: " password
是不需要的。
将 stty sane
添加到您的信号处理程序,以便它将终端恢复到默认状态:
sig_handler() {
echo "SIGINT received"
stty sane
exit 1
}
在等待操作 read -sp
的输入时按 Ctrl-C returns 操作返回到命令行,但给定的输入被隐藏,就像它仍然是 运行 read -s
.
例子
#!/bin/sh
sig_handler() {
echo "SIGINT received"
exit 1
}
trap "sig_handler" SIGINT
read -sp "ENTER PASSWORD: " password
echo
echo $password
正常执行如下:
$~ ./example.sh
ENTER PASSWORD:
password
$~ text
-bash: text: command not found
但如果您在输入密码时按 Ctrl-C,您会得到
$~ ./example.sh
ENTER PASSWORD: SIGINT received
$~ -bash: text: command not found
在使用 reset
刷新之前,文本或任何其他后续命令不会显示为输入。
如何在收到SIGINT后return文本正常输入?出于明显的安全原因,read -p "ENTER PASSWORD: " password
是不需要的。
将 stty sane
添加到您的信号处理程序,以便它将终端恢复到默认状态:
sig_handler() {
echo "SIGINT received"
stty sane
exit 1
}