Kilka uwag na temat STTYpolecenia 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 ioctlflagi 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 sttypolecenie.
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 Awysłany przez terminal jest uważany za a. Oznacza to, że z tej pozycji ON, mogę teraz wpisywane LSna moim VT50, a powłoka będzie odczytane lsz /dev/ttyX. Mogę teraz także uruchomić sttypolecenie.
- Teraz, używając
IUCLCsamego i terminala echo, podczas pisania piszę LSsterownik odsyła z lspowrotem 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 Aprzez wpisanie \A, a na wyjściu, duża litera Ajest renderowana jako \A. (ten nie jest zaimplementowany w systemie Linux)
sttyKomenda ma odpowiednie iuclc, olcucoraz xcaseustawienia i alias dla wszystkich trzech: lcase. Domyślne ustawienie i to, co otrzymujesz, stty sanejest lcasewyłą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 STTYpolecenia jako aliasu sttyi dlatego sttyobsługuje LCASEjako alias lcase.
Nie ma takiego SANEaliasu, ponieważ nie chcesz tego robić, stty sanegdy twój terminal jest pisany wielkimi literami.
Jeśli uruchamiasz stty lcaselub stty olcucprzez pomyłkę na normalnym terminalu (wypróbuj go xtermlub innym nowoczesnym terminalu), musisz tam wejść, stty saneaby wrócić do normalności. Ale nie potrzebujesz do tego STTYpolecenia. Jeśli wpiszesz stty sane, to będzie patrz STTY SANEechem z powrotem, ale to jest tylko wyświetlany tekst (nie weszła poleceń), które zostały przetłumaczone, to nadal jest stty sanepolecenie, które zostanie uruchomione.
Ci iuclc, olcuc, xcaseflagi 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.