Vraag Als u op Enter drukt, produceert u ^ M in plaats van een nieuwe regel


Bijvoorbeeld, als ik dat ben tail -feen bestand of readde gebruikersinvoer, <Enter> zal produceren ^M in de terminal in plaats van het einde van de read of een nieuwe regel toevoegen aan stdout. ^J werkt prima.

Im sshin het ubuntu-systeem, als dat ertoe doet. Dit gebeurt me zowel in zsh als bash. Een oplossing waarmee ik heb gespeeld, is het opnieuw toewijzen van de ^M naar ^J in zsh, maar dat lijkt het root probleem niet op te lossen. Weet iemand wat dit zou kunnen veroorzaken?

Bewerken: Om een ​​paar vragen te beantwoorden, ben ik dat sshing in Ubuntu van OSX. Ik gebruik iTerm en zsh. Ik vergat ook te vermelden dat ik tmux op de Ubuntu-machine gebruik.

Bewerken 2: een vraag gemist. Wanneer ik typ Ctrl-V Enter ik krijg ^M (zowel op OSX als Ubuntu).

Bewerk 3: Over OSX en Ubuntu echo $TERM produceert screen-256color.


65
2018-04-01 01:39


oorsprong


Wat gebruikt u om SSH te gebruiken voor Ubuntu? - Tasos
Ja --- en van welk besturingssysteem? Het lijkt een TERM-probleem. - Rmano
Wat krijg je als je typt Ctrl + V gevolgd door invoeren? Omdat je opdrachten prima kunt uitvoeren, is dit zeker geen probleem van de shell. - Adaephon
Heeft een bewerking gemaakt om vragen te beantwoorden. Bedankt. - benekastah
Een (onvrijwillige) herstart van mijn OSX-box lijkt het probleem te hebben opgelost ... ik denk dat het daar een van is. Hopelijk is het voorgoed verdwenen. - benekastah


antwoorden:


In het geval dat iemand anders dit probleem heeft, is dit waarschijnlijk een probleem met de stty-terminale lijninstelling in plaats van een TERM-probleem. Als dit je opnieuw overkomt, probeer dan te rennen stty sane en laat het ons weten als dat het oplost.


137
2018-04-22 05:21



Dit heeft me geholpen. - Lasse Dahl Ebert
Werkte ook voor mij - Maidomax
Dit werkt ook op OS X. - Patrick Berkeley
Werkte voor mij (Mint 17.1). - Deleet
Werk aan Ubuntu Bionic - protoEvangelion


Probeer te rennen stty -a om uw terminalinstellingen te bekijken. Mijn vermoeden is dat jij icrnl instelling is niet ingesteld en wordt weergegeven als -icrnl (het minteken betekent dat het is uitgeschakeld) in plaats van dat het de normale instelling heeft om aan te staan. Hier is hoe mijn terminal normaal gesproken wordt ingesteld wanneer ik me aanmeld:

$ 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

En ik heb geen probleem met regeleinden: ofwel return (^ M) of enter (^ J) zullen invoerregels beëindigen. Maar als ik me omdraai icrnl uit dan verschijnen ^ M-codes plots elke keer als ik tegen een programma spreek en druk op Enter:

$ 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

De code icrnl betekent "zet koerier terug in nieuwe regels" en verbergt zich voor het lopende programma dat u misschien ^ M zou typen als Unix echt wil ^ J. Oude toetsenborden hadden vroeger een afzonderlijke Return en Enter-toets (waarbij Return je normaal gesproken door een formulier leidde en Enter diende het in), maar vandaag hebben we over het algemeen maar één line-ending key en daarom helpt deze terminal-instelling de twee betekenissen te combineren.

Voeg de toe stty icrnl opdracht aan jou .profile of .bashrc als je vindt dat dit inderdaad de probleemstelling is.


29
2018-04-24 17:48