2017-02-01 36 views
5

Naciśnięcie klawisza Ctrl-C podczas oczekiwania na dane wejściowe z operacji read -sp przywraca działanie z powrotem do wiersza poleceń, ale dane wejściowe są ukryte, tak jak wciąż są w toku: read -s.Wejście terminalu ukryte po przerwaniu "read -s"

przykład

#!/bin/sh 

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

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

który wykonuje normalnie lubię:

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

ale jeśli nacisnąć Ctrl-C na ENTER PASSWORD masz

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

gdzie tekst lub inny następujące polecenie nie jest wyświetlane jako dane wejściowe, dopóki nie odświeżysz się za pomocą reset.

Jak można przywrócić tekst do normalnego wejścia po otrzymaniu SIGINT? read -p "ENTER PASSWORD: " password nie jest pożądany z oczywistych względów bezpieczeństwa.

Odpowiedz

4

Dodaj stty sane do obsługi sygnału, dzięki czemu przywraca terminal do stanu domyślnego:

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

To ciekawe, dodałem stty sane i tput RS1 w sig_handler zanim bez żadnego wpływu (testowanie teraz, że działa) musi przypadkowo umieścić go pod wyjściem 1 lub czymś podobnym. Dzięki – Mike