Jedną z rzeczy, które denerwują mnie przy użyciu terminala Linuksa, jest to, że muszę wpisać niewidoczne hasło, na przykład podczas uruchamiania ssh . Czasami błędnie wpisuję jedną lub więcej liter, a następnie muszę kilka razy nacisnąć klawisz Backspace, aby upewnić się, że wszystko zostało usunięte, aby rozpocząć od nowa.
Wiem, że to nie jest wielka sprawa, ale ponieważ pewnego dnia dowiedziałem się, że naciśnięcie CTRL + L „czyści” terminal, zastanawiałem się, czy istnieje sposób na usunięcie / skasowanie niewidocznego hasła bez polegania na backspace lub naciśnięciu klawisza Enter, aby Spróbuj ponownie.
Wiem, że już na nie odpowiedziano, ale odpowiedź nie wyjaśnia, co się dzieje.
Aplikacja obsługuje znaki takie jak Ctrl+ . W przypadku wprowadzania danych wejściowych do powłoki, na przykład , usuwa ekran. Niektóre aplikacje, na przykład , używają go do przerysowania ekranu i / lub wyśrodkowania kursora.L
bash
emacs
Znaki takie jak Ctrl+ Uw pytaniu o hasło są obsługiwane przez dyscyplinę linii TTY . Będą działać za każdym razem, gdy terminal wejściowy znajdzie się w „kanonicznym” trybie edycji linii, czyli w jakim trybie znajdują się twoje programy podczas wprowadzania hasła. W tym trybie to samo jądro Linuksa interpretuje te znaki. Możesz zobaczyć, jakie funkcje są przypisane do których klawiszy na wyjściu
stty -a
:Tutaj możesz zobaczyć, że Ctrl+ Ujest przywiązany
kill
, co (zgodnie ze stty man page ) „usunie bieżącą linię”. Możesz także użyćstty
do zmiany tego mapowania:Ta strona zawiera wiele świetnych informacji o warstwie TTY, jeśli jesteś zainteresowany.
Jeśli rzeczy nie były wystarczająco mylące: kiedy pojawi się monit interaktywny
bash
, tak naprawdę nie jesteś w „kanonicznym” trybie edycji linii. Zamiast tegobash
odbiera każdy znak bezpośrednio podczas pisania i interpretuje same sekwencje kontrolne za pośrednictwem biblioteki readline . Ta biblioteka będzie honorować odwzorowania ustawione na urządzeniu końcowym, więc nadal możeszstty
ich zmieniać. Możesz też dostosować je niezależnie wewnątrzbash
i innych programów opartych na readline, ustawiającunix-line-discard
właściwość w~/.inputrc
pliku. Zobacz stronę podręcznika użytkownika bash, aby uzyskać więcej informacji.Po uruchomieniu programu
bash
ponownie włącza tryb edycji linii kanonicznej (stty icanon
), jeśli był wcześniej włączony, a następnie wyłącza go ponownie po zakończeniu programu (stty -icanon
).źródło