Premendo Invio si produce ^ M invece di una nuova riga


94

Ad esempio, se sto tail -fING un file o reading input dell'utente, <Enter>produrrà ^Mnel terminale invece di terminare la reado aggiungendo una nuova riga nello stdout. ^Jfunziona bene.

Sto sshentrando nel sistema Ubuntu, se è importante. Questo succede a me sia in zsh che in bash. Una soluzione con cui ho giocato è rimappare il ^Mto ^Jin zsh, ma sembra che non risolva il problema di root. Qualcuno sa cosa potrebbe causare questo?

Modifica: per rispondere ad alcune domande, sto sshinserendo Ubuntu da OSX. Sto usando iTerm e zsh. Ho anche dimenticato di menzionare che sto usando tmux sulla macchina Ubuntu.

Modifica 2: mancata una domanda. Quando scrivo Ctrl-V Enterottengo ^M(sia su OSX che su Ubuntu).

Modifica 3: su OSX e Ubuntu echo $TERMproduce screen-256color.


Cosa stai usando per ssh su Ubuntu?
Tasos

Sì --- e da quale sistema operativo? Sembra un problema TERM.
Rmano,

Cosa ottieni se digiti Ctrl + V seguito da Invio ? Dato che sei in grado di eseguire i comandi bene, questo non è sicuramente un problema della shell.
Adaephon

2
Un riavvio (involontario) del mio box OSX sembra aver risolto il problema ... Immagino sia uno di quelli. Spero che sia andato per sempre.
Benekastah,

Anche per me l'unica cosa che ha funzionato è stata un riavvio incluso il nulla osta della NVRAM. Premi e tieni premuti i tasti Comando-Opzione-PR immediatamente dopo aver sentito il suono di avvio per ripristinare anche la NVRAM di OSx
jonbros

Risposte:


192

Nel caso in cui qualcun altro abbia questo problema, molto probabilmente è un problema con l'impostazione della linea terminale stty piuttosto che un problema TERM. Se ti succede di nuovo, prova a correre stty sanee facci sapere se questo risolve il problema.


22
Funziona anche su OS X.
Patrick Berkeley,

1
Ha funzionato per me (menta 17.1).
Deleet,

1
Lavora su Ubuntu Bionic
protoEvangelion

funziona bene su iTerm2 su Mojave
Rakib il

ha funzionato per il mio su gattino su archlinux
yukashima huksay il

31

Prova a correre stty -aper visualizzare le impostazioni del tuo terminale. Il mio sospetto è che l' icrnlimpostazione non sia impostata e verrà visualizzata come -icrnl(il segno meno indica che è disattivata) invece di avere la solita impostazione di essere attiva. Ecco come viene normalmente impostato il mio terminale quando eseguo l'accesso:

$ 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

E non ho problemi con le terminazioni di riga: return (^ M) o invio (^ J) termineranno le righe di input. Ma se icrnlspengo, i codici ^ M compaiono improvvisamente ogni volta che parlo con un programma e premo Invio:

$ 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

Il codice icrnlsignifica "trasforma i ritorni a capo in newline" e nasconde dal programma in esecuzione che potresti digitare ^ M quando Unix vuole davvero ^ J. Le vecchie tastiere avevano un tasto Return e Enter separato (dove Return in genere ti faceva avanzare attraverso un modulo e Enter lo ha inviato), ma oggi generalmente abbiamo un solo tasto di fine riga e quindi questa impostazione del terminale aiuta a combinare i due significati.

Aggiungi il stty icrnlcomando al tuo .profileo .bashrcse trovi che questa è davvero l'impostazione del problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.