Alcune note sul STTY
comando 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 stty
comando.
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' A
invio dal terminale è considerato come a a
. Ciò significa che con questo, ora posso digitare LS
sul mio VT50 e la shell leggerà ls
da /dev/ttyX
. Ora posso anche eseguire il stty
comando.
- Ora, con
IUCLC
solo e terminale echo
, mentre scrivo LS
, il driver rimanderebbe ls
al 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 A
digitando \A
e, in uscita, A
viene visualizzato un maiuscolo come \A
. (quello non è implementato su Linux)
Il stty
comando ha corrispondenti iuclc
, olcuc
e xcase
le impostazioni e un alias per tutti e tre: lcase
. L'impostazione predefinita e ciò che ottieni dopo stty sane
è lcase
disattivato.
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 STTY
comando come alias per stty
, ed è per questo che stty
supporta LCASE
come alias per lcase
.
Non esiste un tale SANE
alias perché non vuoi farlo stty sane
quando il tuo terminale è tutto maiuscolo.
Se corri stty lcase
o stty olcuc
per errore su un terminale normale (provalo xterm
o su un terminale moderno), è lì che devi entrare stty sane
per tornare alla normalità. Ma non hai bisogno di un STTY
comando per quello. Se si digita stty sane
, si avrà vede STTY SANE
eco indietro, ma questo è solo il testo visualizzato (non il comando inserito) che sono stati tradotti, è ancora il stty sane
comando che verrà eseguito.
Quelli iuclc
, olcuc
, xcase
bandiere 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.