Kilka uwag na temat STTY
polecenia historycznego w celu wyjaśnienia niektórych nieścisłości w drugiej odpowiedzi i powiązanych komentarzach :
Wcześniejsze terminale, takie jak DEC VT05 lub VT50 i wcześniejsze teleprintery obsługiwały tylko wielkie litery. Oznaczało to, że żadna mała litera nie może być od nich nigdy wprowadzona lub że nie będą w stanie wyświetlić żadnej innej litery niż wielkie litery.
W Uniksie rozróżniana jest wielkość liter, a większość poleceń ma małe litery, widać, że jest tam problem. Właśnie dlatego istnieją specjalne tryby termio / termios (i wciąż istnieją w nowoczesnych Unicach, nawet jeśli terminali już dawno nie ma), aby sobie z nimi poradzić.
termio / termios to odpowiednio starsze i nowsze interfejsy do sterowania sterownikiem tty w Uniksie. W termosach określasz ioctl
flagi wejściowe, wyjściowe, sterujące ..., które określają sposób, w jaki sygnały elektryczne w linii szeregowej mają być przetwarzane na znaki wejściowe i wyjściowe oraz wewnętrzne zachowanie sterownika, takie jak echo, edytor linii ... Większość z nich dotyczy terminali wirtualnych, takich jak nowoczesne konsole Unix VGA lub pseudo terminale.
Interfejs wiersza poleceń termio(s)
to stty
polecenie.
Aby obsłużyć duże litery, występują trzy termio(s)
flagi:
IUCLC
(Wprowadź wielkie i małe litery): przychodzące znaki są konwertowane na małe litery podczas wprowadzania. Oznacza to, że A
wysłany przez terminal jest uważany za a
. Oznacza to, że z tej pozycji ON, mogę teraz wpisywane LS
na moim VT50, a powłoka będzie odczytane ls
z /dev/ttyX
. Mogę teraz także uruchomić stty
polecenie.
- Teraz, używając
IUCLC
samego i terminala echo
, podczas pisania piszę LS
sterownik odsyła z ls
powrotem do terminala (aby zobaczyć, co wpisuję), którego nie może wyświetlić, więc potrzebujemy również OLCUC
(Wyjście małych liter na wielkie litery), to znaczy przed wysłaniem do terminala musimy przekonwertować każdą małą literę na wielkie litery.
- Teraz możemy obsługiwać Uniksa z VT50, ale co jeśli teraz chcemy wprowadzić wielkie litery? Tam właśnie pojawia się flaga
xcase
lokalna . Pozwala to (tylko w trybie wprowadzania kanonicznego) na wysyłanie wielkich liter A
przez wpisanie \A
, a na wyjściu, duża litera A
jest renderowana jako \A
. (ten nie jest zaimplementowany w systemie Linux)
stty
Komenda ma odpowiednie iuclc
, olcuc
oraz xcase
ustawienia i alias dla wszystkich trzech: lcase
. Domyślne ustawienie i to, co otrzymujesz, stty sane
jest lcase
wyłączone.
Kiedy korzystasz z VT50, wszystko, co musisz zrobić, to uruchomić:
stty lcase
móc coś zrobić. Ale poczekaj, jak to zrobić, gdy możesz wysyłać tylko wielkie litery? Właśnie tam potrzebujesz STTY
polecenia jako aliasu stty
i dlatego stty
obsługuje LCASE
jako alias lcase
.
Nie ma takiego SANE
aliasu, ponieważ nie chcesz tego robić, stty sane
gdy twój terminal jest pisany wielkimi literami.
Jeśli uruchamiasz stty lcase
lub stty olcuc
przez pomyłkę na normalnym terminalu (wypróbuj go xterm
lub innym nowoczesnym terminalu), musisz tam wejść, stty sane
aby wrócić do normalności. Ale nie potrzebujesz do tego STTY
polecenia. Jeśli wpiszesz stty sane
, to będzie patrz STTY SANE
echem z powrotem, ale to jest tylko wyświetlany tekst (nie weszła poleceń), które zostały przetłumaczone, to nadal jest stty sane
polecenie, które zostanie uruchomione.
Ci iuclc
, olcuc
, xcase
flagi używane do określenia przez POSIX (i to pewnie dlatego, że jest realizowany w systemie Linux, chociaż wątpię, ktokolwiek połączony każdy z tych starych terminali do systemu Linux (inne niż dla zabawy)), ale zostały usunięte w POSIX: 2001.