Par exemple, si je suis tail -f
ing un fichier ou read
ing entrée utilisateur, <Enter>
produira ^M
au lieu de mettre fin à read
ou d’ajouter une nouvelle ligne à stdout. ^J
fonctionne bien.
Je suis ssh
ing dans le système Ubuntu, si cela compte. Cela m’arrive à la fois en zsh et en bash. Une solution avec laquelle j'ai joué consiste à remapper le ^M
en ^J
dans zsh, mais il semble que cela ne résoudrait pas le problème racine. Quelqu'un sait ce qui pourrait causer cela?
Edit: Pour répondre à quelques questions, je suis ssh
ing dans Ubuntu à partir d’OSX. J'utilise iTerm et zsh. J'ai également oublié de mentionner que j'utilise tmux sur la machine Ubuntu.
Edit 2: Vous avez manqué une question. Lorsque je tape Ctrl-V Enter
, je reçois ^M
(à la fois sous OSX et Ubuntu).
Edit 3: Sous OSX et Ubuntu echo $TERM
produit screen-256color
.
Si quelqu'un d'autre a ce problème, il s'agit probablement d'un problème de paramètre de ligne de terminal stty plutôt que d'un problème TERM. Si cela vous arrive à nouveau, essayez d'exécuter stty sane
et dites-nous si cela résout le problème.
Essayez d’exécuter stty -a
pour afficher les paramètres de votre terminal. Je soupçonne que votre paramètre icrnl
n'est pas défini et sera affiché sous la forme -icrnl
(le signe moins qu'il est désactivé) au lieu d'être activé. Voici comment mon terminal est normalement configuré lorsque je me connecte:
$ 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
Et je n’ai aucun problème avec les fins de ligne: soit retour (^ M), soit entrée (^ J) mettra fin aux lignes d’entrée. Mais si je désactive icrnl
name__, ^ M codes apparaissent soudainement à chaque fois que je parle à un programme et que je clique sur Entrée:
$ 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
Le code icrnl
signifie "transformer les retours chariot en nouvelles lignes" et masque le programme en cours d'exécution que vous pourriez taper ^ M quand Unix voudra vraiment ^ J. Auparavant, les anciens claviers avaient une touche Entrée et Entrée distincte (Return vous faisant généralement avancer un formulaire et Entrée soumis), mais aujourd'hui, nous n'avons généralement qu'une touche de fin de ligne. Ce paramètre de terminal permet donc de combiner les deux sens.
Ajoutez la commande stty icrnl
à votre .profile
ou .bashrc
si vous constatez qu'il s'agit bien du paramètre du problème.