Alcune note sul STTYcomando storico per chiarire alcune imprecisioni nell'altra risposta e commenti associati :
I terminali precedenti come DEC VT05 o VT50 e le teleprinter prima supportavano solo caratteri maiuscoli. Ciò significava che nessun carattere minuscolo poteva mai essere inserito da loro o che non sarebbero stati in grado di visualizzare lettere diverse da quelle maiuscole.
Unix fa distinzione tra maiuscole e minuscole e la maggior parte dei comandi è minuscola, puoi vedere che c'è un problema lì. Ecco perché ci sono speciali modalità termio / termios (e che sono ancora presenti nei moderni Unices anche se quei terminali sono spariti da tempo) per gestirli.
termio / termios sono rispettivamente le interfacce più vecchie e più recenti per controllare il driver tty su Unix. In una (e) termina (e) ioctl, si specificano input, output, flag di controllo ... che specificano come i segnali elettrici su una linea seriale devono essere gestiti in caratteri di input e output e il comportamento interno del driver scrive cose come l'eco, il line editor ... La maggior parte di questi si applica a terminali virtuali come le moderne console VGA Unix o pseudo terminali.
L'interfaccia della riga di comando termio(s)è il sttycomando.
Per gestire i terminali maiuscoli, sono termio(s)coinvolti tre flag:
IUCLC(Immetti maiuscolo in minuscolo): i caratteri in arrivo vengono convertiti in minuscolo quando immessi. Ciò significa che l' Ainvio dal terminale è considerato come a a. Ciò significa che con questo, ora posso digitare LSsul mio VT50 e la shell leggerà lsda /dev/ttyX. Ora posso anche eseguire il sttycomando.
- Ora, con
IUCLCsolo e terminale echo, mentre scrivo LS, il driver rimanderebbe lsal terminale (così posso vedere quello che scrivo) che non può visualizzare, quindi abbiamo anche bisogno di OLCUC(Uscita da minuscole a maiuscole), cioè dobbiamo convertire le lettere minuscole in maiuscole prima di inviarle al terminale.
- Ora, possiamo utilizzare Unix da un VT50, ma cosa succede se vogliamo inserire caratteri maiuscoli ora? È qui che entra in gioco il flag
xcase locale . Ciò consente (solo in modalità di input canonica) di inviare un maiuscolo Adigitando \Ae, in uscita, Aviene visualizzato un maiuscolo come \A. (quello non è implementato su Linux)
Il sttycomando ha corrispondenti iuclc, olcuce xcasele impostazioni e un alias per tutti e tre: lcase. L'impostazione predefinita e ciò che ottieni dopo stty saneè lcasedisattivato.
Quindi, quando sei su un VT50, tutto ciò che devi fare è eseguire:
stty lcase
per poter fare qualsiasi cosa. Ma tieni duro, come puoi farlo quando puoi inviare solo lettere maiuscole? Ecco dove è necessario un STTYcomando come alias per stty, ed è per questo che sttysupporta LCASEcome alias per lcase.
Non esiste un tale SANEalias perché non vuoi farlo stty sanequando il tuo terminale è tutto maiuscolo.
Se corri stty lcaseo stty olcucper errore su un terminale normale (provalo xtermo su un terminale moderno), è lì che devi entrare stty saneper tornare alla normalità. Ma non hai bisogno di un STTYcomando per quello. Se si digita stty sane, si avrà vede STTY SANEeco indietro, ma questo è solo il testo visualizzato (non il comando inserito) che sono stati tradotti, è ancora il stty sanecomando che verrà eseguito.
Quelli iuclc, olcuc, xcasebandiere usate da precisare da POSIX (e questo è probabilmente il motivo per cui viene implementato su Linux, anche se dubito seriamente che nessuno mai collegato uno di questi vecchi terminali ad un sistema Linux (diversi da quelli per divertimento)), ma sono stati rimossi in POSIX: 2001.