it-swarm.com.de

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

Wenn ich zum Beispiel tail -f eine Datei oder read eine Benutzereingabe mache, erzeugt <Enter> im Terminal ^M, anstatt read zu beenden oder eine neue Zeile hinzuzufügen zu übertreiben. ^J funktioniert gut.

Ich bin sshin das 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, den ^M dem ^J in zsh zuzuordnen, aber das scheint, als würde es das Root-Problem nicht beheben. Weiß jemand, was dies verursachen könnte?

Bearbeiten: Um einige Fragen zu beantworten, bin ich ssh in 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 Ctrl-V Enter eingebe, erhalte ich ^M (sowohl unter OSX als auch unter Ubuntu).

Edit 3: Unter OSX und Ubuntu erzeugt echo $TERMscreen-256color.

91
benekastah

Falls jemand anderes dieses Problem hat, handelt es sich höchstwahrscheinlich eher um ein Problem mit der Einstellung der stty-Terminalleitung als um ein TERM-Problem. Wenn Ihnen dies erneut passiert, versuchen Sie, stty sane auszuführen, und lassen Sie uns wissen, ob dies das Problem behebt.

184
hackerb9

Versuchen Sie, stty -a auszuführen, um Ihre Terminaleinstellungen anzuzeigen. Mein Verdacht ist, dass Ihre icrnl -Einstellung nicht festgelegt ist und als -icrnl (das Minuszeichen bedeutet, dass sie deaktiviert ist) angezeigt wird, anstatt die übliche 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 icrnl ausschalte, erscheinen jedes Mal, wenn ich mit einem Programm spreche, plötzlich ^ M-Codes und drücken Sie 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 icrnl bedeutet "Wagenrücklauf in Zeilenumbrüche umwandeln" und verbirgt sich vor dem laufenden Programm, das Sie möglicherweise eingeben ^ M, 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 Befehl stty icrnl zu Ihrem .profile oder .bashrc hinzu, wenn Sie feststellen, dass dies tatsächlich die Problemeinstellung ist.

30
Brandon Rhodes