Durch Drücken der Eingabetaste wird ^ M anstelle einer neuen Zeile erzeugt

94

Wenn ich zum Beispiel tail -feine Datei oder eine readBenutzereingabe mache , <Enter>wird ^Mim Terminal produziert, anstatt das zu beenden readoder eine neue Zeile zu stdout hinzuzufügen. ^Jfunktioniert gut.

Ich bin sshim Ubuntu-System, wenn das wichtig ist. Das passiert mir sowohl in zsh als auch in bash. Eine Lösung, mit der ich gespielt habe, besteht darin, das ^Mto ^Jin zsh neu zuzuordnen, aber das scheint das Root-Problem nicht zu beheben. Weiß jemand, was dies verursachen könnte?

Bearbeiten: Um einige Fragen zu beantworten, bin ich sshin Ubuntu von OSX. Ich benutze iTerm und zsh. Ich habe auch vergessen zu erwähnen, dass ich tmux auf dem Ubuntu-Rechner verwende.

Bearbeiten 2: Verpasste eine Frage. Wenn ich tippe Ctrl-V Enterbekomme ich ^M(sowohl unter OSX als auch unter Ubuntu).

Edit 3: Unter OSX und Ubuntu echo $TERMproduziert screen-256color.

benekastah
quelle
Was verwendest du, um auf Ubuntu zu sshen?
Tasos
Ja --- und von welchem ​​Betriebssystem? Es scheint ein kurzfristiges Problem zu sein.
Rmano
Was bekommen Sie, wenn Sie Strg + V gefolgt von der Eingabetaste eingeben ? Da Sie Befehle problemlos ausführen können, ist dies definitiv kein Problem der Shell.
Adaephon
2
Ein (unfreiwilliger) Neustart meiner OSX-Box scheint das Problem behoben zu haben ... Ich denke, es ist eine davon. Hoffentlich ist es endgültig vorbei.
Benekastah
Auch für mich funktionierte nur ein Neustart einschließlich der Freigabe des NVRAM. Halten Sie die Befehlstaste-Wahltaste-PR unmittelbar nach dem Startton
gedrückt,

Antworten:

192

Falls jemand anderes dieses Problem hat, ist es höchstwahrscheinlich eher ein Problem mit der Einstellung der stty-Terminalleitung als ein TERM-Problem. Wenn Ihnen dies erneut passiert, versuchen Sie es mit dem Ausführen stty saneund lassen Sie uns wissen, ob dies das Problem behebt.

hackerb9
quelle
22
Dies funktioniert auch unter OS X.
Patrick Berkeley
1
Hat für mich gearbeitet (Mint 17.1).
Deleet
1
Arbeiten an Ubuntu Bionic
protoEvangelion
funktioniert gut auf iTerm2 auf Mojave
Rakib
arbeitete für meine Katze auf Archlinux
Yukashima Huksay
31

Versuchen Sie auszuführen stty -a, um Ihre Terminaleinstellungen anzuzeigen. Mein Verdacht ist, dass Ihre icrnlEinstellung nicht festgelegt ist und als angezeigt wird -icrnl(das Minuszeichen bedeutet, dass sie deaktiviert ist), anstatt die gewohnte Einstellung zu haben, eingeschaltet zu sein. So wird mein Terminal normalerweise eingerichtet, wenn ich mich anmelde:

$ stty -a
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

Und ich habe kein Problem mit Zeilenenden: entweder return (^ M) oder enter (^ J) beendet Eingabezeilen. Aber wenn ich mich icrnlausschalte, tauchen jedes Mal, wenn ich mit einem Programm spreche, plötzlich ^ M-Codes auf und drücken die Eingabetaste:

$ stty -icrnl
$ read line
Line of text^M^M^M^M
$ stty -a
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

Der Code icrnlbedeutet "Wagenrücklauf in Zeilenumbrüche umwandeln" und verbirgt sich vor dem laufenden Programm, das Sie möglicherweise eingeben, wenn Unix wirklich ^ J will. Früher hatten alte Tastaturen eine separate Return- und Enter-Taste (wobei Return Sie normalerweise über ein Formular weitergeleitet und von Enter übermittelt hat), heute haben wir jedoch im Allgemeinen nur eine Zeilenende-Taste. Diese Terminal-Einstellung hilft also, die beiden Bedeutungen zu kombinieren.

Fügen Sie den stty icrnlBefehl zu Ihrem .profileoder hinzu, .bashrcwenn Sie feststellen, dass dies tatsächlich die Problemeinstellung ist.

Brandon Rhodes
quelle