Несколько замечаний по исторической STTYкоманде, чтобы прояснить некоторые неточности в другом ответе и связанных комментариях :
Более ранние терминалы, такие как DEC VT05 или VT50 и телепринтеры до этого, поддерживали только символы верхнего регистра. Это означало, что ни один символ нижнего регистра никогда не мог быть введен от них или что они не могли бы отображать любые другие буквы, кроме прописных.
Unix чувствителен к регистру, а большинство команд - в нижнем регистре, вы можете видеть, что здесь есть проблема. Вот почему существуют специальные режимы termio / termios (и они все еще существуют в современных Unices, хотя эти терминалы давно исчезли) для их обработки.
termio / termios - соответственно старый и новый интерфейсы для управления драйвером tty в Unix. В термине (ах) ioctlвы указываете ввод, вывод, управляющие флаги ... которые определяют, как электрические сигналы в последовательной линии должны обрабатываться во входных и выходных символах, а также внутреннее поведение драйвера в таких вещах, как эхо, линейный редактор ... Большинство из них применимы к виртуальным терминалам, таким как современные Unix VGA-консоли или псевдо-терминалы.
Интерфейс командной строки termio(s)является sttyкомандой.
Для обработки терминалов в верхнем регистре используются три termio(s)флага:
IUCLC(Ввод заглавных букв в нижний регистр): входящие символы преобразуются в нижний регистр при вводе. Это означает, что Aотправленный терминалом считается как a. Это означает, что с этим я могу теперь печатать LSна моем VT50, и оболочка будет читать lsс /dev/ttyX. Теперь я также могу запустить sttyкоманду.
- Теперь, когда
IUCLCодин и терминал echo, когда я печатаю LS, драйвер отправляет lsобратно на терминал (чтобы я мог видеть то, что я печатаю), который он не может отобразить, поэтому нам также нужно OLCUC(вывод нижнего регистра в верхний регистр), то есть перед отправкой на терминал нам нужно преобразовать любую строчную букву в прописную.
- Теперь мы можем работать с Unix с VT50, но что если мы хотим ввести символы верхнего регистра сейчас? Вот тут и появляется
xcase локальный флаг. Это позволяет (только в режиме канонического ввода) отправлять верхний регистр A, печатая \A, а на выходе верхний регистр Aотображается как \A. (этот не реализован в Linux)
sttyКоманда имеет соответствующую iuclc, olcucи xcaseнастройку и псевдоним для всех трех: lcase. Настройка и то , что вы получаете по умолчанию после того, как stty saneэто lcaseпрочь.
Итак, когда вы на VT50, все, что вам нужно сделать, это запустить:
stty lcase
быть в состоянии сделать что-нибудь. Но подожди, как ты это делаешь, когда можешь отправлять только заглавные буквы? Вот где вам нужна STTYкоманда как псевдоним для stty, и поэтому sttyподдерживает LCASEкак псевдоним для lcase.
Такого SANEпсевдонима нет, потому что вы не хотите делать это, stty saneкогда ваш терминал в верхнем регистре.
Если вы запускаете stty lcaseили stty olcucпо ошибке на обычном терминале (попробуйте его xtermили на любом современном терминале), вам нужно войти, stty saneчтобы вернуться к обычному. Но вам не нужна STTYкоманда для этого. Если вы набираете stty sane, вы будете смотреть STTY SANEэхо, но это только отображается текст (не вошли команды) , которые будут переведены, это по - прежнему stty saneкоманда , которая будет работать.
Те iuclc, olcuc, xcaseиспользуемые флаги, указываемые POSIX (и это, вероятно , почему он реализован на Linux , хотя я серьезно сомневаюсь , что кто - нибудь когда - либо подключен любой из этих старых терминалов в системе Linux (кроме для удовольствия)), но были удалены POSIX: 2001.