Почему терминал отправляет CR, хотя установлен ICRNL?

Почему терминал отправляет CR, хотя установлен ICRNL?

У меня есть терминал с bashоболочкой.

На терминале установлен ICRNLфлаг (поэтому, когда терминал отправляет CR, он будет преобразован в LF, а затем LFбудет отправлен в bash):

введите описание изображения здесь

Но я сделал тест, который показал, что bashполучит CRи нет LF. Почему так?

Тест, который я сделал, запущен hexdumpна другом терминале и заставляет его считывать то, что отправляет первый терминал.

решение1

При запуске stty -aиз командной строки bash вы видите настройки терминала, при этом bash не считывает командную строку.

Когда bash читает командную строку, он изменяет некоторые настройки терминала, включая icrnl(отключено, поскольку bash требует необработанный ввод, поскольку он выполняет собственную обработку ввода). Bash восстанавливает исходные настройки перед запуском команды.

Чтобы увидеть настройки терминала в командной строке bash, запомните, какой это терминал, и запустите sttyс другого терминала. Например:

  1. В одном терминале:

    bash-4.2$ tty
    /dev/pts/3
    bash-4.2$ 
    
  2. В другом терминале:

    $ stty -a </dev/pts/3
    … -icrnl …
    

Связанный контент