Warum sendet das Terminal einen CR, obwohl ICRNL gesetzt ist?

Warum sendet das Terminal einen CR, obwohl ICRNL gesetzt ist?

Ich habe ein Terminal mit der bashShell.

Das Terminal hat das ICRNLFlag gesetzt (wenn das Terminal also ein sendet CR, wird es in übersetzt LFund anschließend LFan gesendet bash):

Bildbeschreibung hier eingeben

Aber ich habe einen Test gemacht, der gezeigt hat, dass bashempfangen wird CRund nicht LF. Warum ist das so?

Der von mir durchgeführte Test wird hexdumpin einem anderen Terminal ausgeführt und lässt es lesen, was das erste Terminal sendet.

Antwort1

Wenn Sie es stty -avon der Bash-Eingabeaufforderung aus ausführen, werden Ihnen die Terminaleinstellungen angezeigt, während Bash keine Befehlszeile liest.

Wenn Bash eine Befehlszeile liest, ändert es einige Terminaleinstellungen, darunter icrnl(ausgeschaltet, da Bash Roheingaben benötigt, da es seine eigene Eingabeverarbeitung durchführt). Bash stellt die ursprünglichen Einstellungen wieder her, bevor der Befehl ausgeführt wird.

Um die Terminaleinstellungen in der Bash-Eingabeaufforderung anzuzeigen, notieren Sie sich, um welches Terminal es sich handelt, und führen Sie es sttyvon einem anderen Terminal aus aus. Beispiel:

  1. In einem Terminal:

    bash-4.2$ tty
    /dev/pts/3
    bash-4.2$ 
    
  2. In einem anderen Terminal:

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

verwandte Informationen