2012-06-11 19 views
6

Piszę skrypt basha, w którym odczytuję pojedyncze znaki z danych wejściowych. Robię to za pomocą read -n 1 -s. -n 1 to odczyt pojedynczego znaku; -s to tryb "cichy", w którym wpisane znaki nie będą widoczne.Zapobieganie wyświetlaniu znaków (np. Wyłączanie atrybutu "echo" w termiach)

Problem polega na tym, że gdy aktualnie wykonywana komenda nie jest read (za każdym razem, gdy wykonywane są inne polecenia w skrypcie basha), zostanie wyświetlony znak w terminalu.

Jest to normalne zachowanie programu na terminalu. Aby to wyłączyć, zwykle wyłącza się tryb echa, na przykład za pomocą biblioteki termios.

Jak mogę to osiągnąć w skrypcie basha?

Preferuję rozwiązania w czystych komendach bash/Unix (bez innych języków skryptowych, takich jak python, perl itp.).

Odpowiedz

14
stty -echo 
# Anything they type won't output here 
stty echo 
# Now it will 
+1

Tak. To było szybkie :) Dzięki! (Mogę przyjąć w ciągu 12 minut.) – leemes