中断'读取'后隐藏终端输入。

时间:2017-02-01 17:35:41

标签: linux sh stty

在等待来自操作read -sp的输入时按Ctrl-C会将操作返回到命令行,但是给定的输入会被隐藏,因为它仍在运行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

但是如果你在ENTER PASSWORD按Ctrl-C就可以了

$~ ./example.sh
ENTER PASSWORD: SIGINT received
$~ -bash: text: command not found

在您使用reset进行刷新之前,文本或任何其他后续命令不会显示为输入。

接收SIGINT后如何将文本返回正常输入?出于明显的安全原因,不希望read -p "ENTER PASSWORD: " password

1 个答案:

答案 0 :(得分:4)

stty sane添加到信号处理程序,以便将终端恢复为默认状态:

sig_handler() {
  echo "SIGINT received"
  stty sane
  exit 1
}