W przeciwieństwie bash
, ssh
jest prośba o podanie hasła nie korzysta z żadnego specjalnego terminala wejściowego biblioteki podobnego readline
. Funkcje edycji linii to tylko podstawowe funkcje edycji linii POSIX TTY.
Masz więc POSIX TTY w trybie „gotowanym” (nie surowym), znanym również jako tryb kanoniczny, a jedyną dostępną edycją linii jest to, co zapewnia jądro. Zobacz stty(1)
i zauważ to
kill = ^U
. Tutaj również definiowany jest znak backspace ( erase = ^?
). Usuwanie słów ( ^W
) jest wygodne, gdy nie piszesz w ciemno.
lnext = ^V
oznacza, że możesz wpisać control-v, a następnie cokolwiek (w tym control-c), aby uzyskać literalną kontrolę-c.
Aby debugować to, co próbujesz zrobić na ślepo, uruchom cat
lub cat > /dev/null
w swoim terminalu . Wpisz rzeczy, a następnie sprawdź, co działa, a co nie, aby je edytować.
readline
(używane przez bash
) odczytuje surowy znak i wykonuje edycję linii w przestrzeni użytkownika. Jego domyślne powiązania są jednak zgodne z domyślnymi znakami kontrolnymi TTY dla podzbioru funkcji edycyjnych, które oba zapewniają.
readline wykracza poza zwykłą edycję linii zwykłego TTY. (np TTY może jedynie usunąć znaki na końcu linii, więc nie ma ^a
i delete
czy strzałka w lewo / w prawo)
Gdy bash
uruchamia polecenie w planie, to stawia w trybie TTY kanonicznej pierwszy (ponieważ jest to ustawienie domyślne). Tak więc uruchomiona stty -a
(bez przekierowania) zawsze zobaczy swój własny terminal w trybie kanonicznym. Ale jeśli przekierujesz dane wejściowe z innego bash
działającego na nim TTY , możesz zobaczyć, jakie ustawienia terminalu zastosował bash + readline. np. stty -a < /dev/pts/12
pokazuje -icanon
tryb surowy, ponieważ mam bash
uruchomiony na tym terminalu. (Przełączyłem się na inną kartę i uruchomiłem tty
, a następnie użyłem ścieżki pliku urządzenia z pierwszego terminala). Gdybym biegł cat
w tym drugim terminalu, sprawdziłbym icanon
tryb kanoniczny.
Powiązane: TTY odszyfrowany
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html
https://en.wikipedia.org/wiki/POSIX_terminal_interface