У меня есть терминал с bash
оболочкой.
На терминале установлен ICRNL
флаг (поэтому, когда терминал отправляет CR
, он будет преобразован в LF
, а затем LF
будет отправлен в bash
):
Но я сделал тест, который показал, что bash
получит CR
и нет LF
. Почему так?
Тест, который я сделал, запущен hexdump
на другом терминале и заставляет его считывать то, что отправляет первый терминал.
решение1
При запуске stty -a
из командной строки bash вы видите настройки терминала, при этом bash не считывает командную строку.
Когда bash читает командную строку, он изменяет некоторые настройки терминала, включая icrnl
(отключено, поскольку bash требует необработанный ввод, поскольку он выполняет собственную обработку ввода). Bash восстанавливает исходные настройки перед запуском команды.
Чтобы увидеть настройки терминала в командной строке bash, запомните, какой это терминал, и запустите stty
с другого терминала. Например:
В одном терминале:
bash-4.2$ tty /dev/pts/3 bash-4.2$
В другом терминале:
$ stty -a </dev/pts/3 … -icrnl …