Что делает "stty raw -echo" на OS X

Когда я пытаюсь: $ stty raw -echo на моем терминале (Bash на OS X 10.6). Это делает струнные вещи, и это похоже на терминал. Затем я найду руководство:

stty — установите параметры интерфейса терминала

raw (-raw)

Если установлено, измените режимы терминала так, чтобы ни один вход или обработка выходных данных. Если они не установлены, измените режимы терминал к некоторому разумному состоянию, который выполняет ввод и вывод обработка. Обратите внимание, что поскольку драйвер терминала больше не имеет один бит RAW, невозможно установить, какие флаги были установлены перед установкой raw. Это означает, что сброс сырья может не возвращаться все настройки, которые ранее действовали. Чтобы установить терминал в исходное состояние, а затем аккуратно восстановить его, следующую оболочку рекомендуется код:

save_state=$(stty -g)
stty raw
...
stty "$save_state"              

эхо (-echo)

Повторить эхо (не откликнуться) на каждый символ.

Итак, предполагается, что терминал включен в режиме raw, а затем вернет то, что я набираю, как есть? Может кто-нибудь объяснить, что делает эта команда? И в чем разница, когда аргумент имеет тире, например. raw и -raw? Они означают что-то? Есть ли какой-нибудь ресурс, который я мог бы изучить?

Ответ 1

Во-первых, тире означает "отключить" настройку. Таким образом, это позволяет эхом:

stty echo

Это отключает его:

stty -echo

Когда вы отключите его, ваш ввод не будет передан вам обратно, поэтому кажется, что терминал висит. Попробуйте stty -echo, затем введите ls и нажмите return - вы все равно увидите вывод ls.

Параметр raw означает, что вход и выход не обрабатываются, а просто передаются прямо. Обработка может быть такой, как игнорирование определенных символов, перевод символов на другие символы, разрешение сигналов прерывания и т.д. Таким образом, с помощью stty raw вы не можете нажать Ctrl-C, чтобы закончить процесс, например.