2017-02-01 9 views
5

操作からの入力を待っている間にCtrl-Cを押すと、操作はコマンドラインに戻されますが、入力はまだ実行中のように隠されますread -s'read -s'を中断した後にターミナル入力が表示されない

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

しかし、あなたはではCtrl-Cを押した場合は、あなたが

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

どこのテキストまたは他の次のコマンドを取得するパスワードを入力してください:通常、等を実行する

#!/bin/sh 

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

trap "sig_handler" SIGINT 
read -sp "ENTER PASSWORD: " password 
echo 
echo $password 

resetで更新するまで入力として表示されません。

SIGINTを受け取った後、テキストを通常の入力に戻すにはどうすればよいですか? read -p "ENTER PASSWORD: " passwordは明らかなセキュリティ上の理由から望ましくない。それはデフォルトの状態に端末を復元するように

答えて

4

があなたのシグナルハンドラにstty saneを追加します。

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

を面白いことに、私は任意の(テストは、今では動作します)に影響することなく、前sig_handlerにsttyの正気とTPUT RS1を追加しました誤って出口1または何かの下に置いていなければならない。ありがとう – Mike

関連する問題