Несколько замечаний по исторической 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.