2017-02-01 7 views
5

Нажатие Ctrl-C во время ожидания ввода из операции read -sp возвращает операцию обратно в командную строку, но ввод данных скрыт, как и все еще работает read -s.Вход терминала скрыт после прерывания «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 на ENTER PASSWORD вы получите

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

где текст или любой другой следующей команды не отображается как вход, пока вы не обновите с помощью reset.

Как вы можете вернуть текст в обычный ввод после получения SIGINT? read -p "ENTER PASSWORD: " password не рекомендуется по очевидным соображениям безопасности.

ответ

4

Добавить stty sane в обработчик сигнала так, что он восстанавливает терминал в состояние по умолчанию:

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

Это интересно, я добавил Запущенный и tput rs1 в sig_handler прежде, чем без какого-либо аффекта (тестирование теперь работает) должен был случайно поставить его ниже выхода 1 или что-то в этом роде. благодаря – Mike

 Смежные вопросы

  • Нет связанных вопросов^_^