Enter 키를 누르면 줄 바꿈 대신 ^ M이 생성됩니다.


94

예를 들어, tail -f파일을 read입력 하거나 사용자 입력을 입력 하면 stdout에 줄 바꿈을 끝내 거나 줄 바꿈 대신 터미널에서 <Enter>생성 ^M합니다 read. ^J잘 작동합니다.

그게 ssh중요하다면 우분투 시스템에 들어가고 있습니다. 이것은 zsh와 bash에서 나에게 일어난다. 내가 가지고 노는 한 가지 해결책 은 zsh 에서 ^Mto ^J를 다시 매핑하는 것이지만 근본 문제를 해결하지 못하는 것 같습니다. 아무도 이것을 일으키는 원인을 알고 있습니까?

편집 : 몇 가지 질문에 대답하기 위해 sshOSX에서 Ubuntu를 사용하고 있습니다. iTerm과 zsh를 사용하고 있습니다. 또한 우분투 컴퓨터에서 tmux를 사용하고 있다는 것을 잊었습니다.

편집 2 : 질문이 없습니다. 내가 타이핑 Ctrl-V Enter하면 ^M(OSX와 Ubuntu 모두에서) 얻습니다 .

편집 3 : OSX 및 Ubuntu에서 echo $TERM생성합니다 screen-256color.


우분투에 ssh를 사용하기 위해 무엇을 사용하고 있습니까?
Tasos

예 --- 그리고 어느 OS에서? TERM 문제인 것 같습니다.
Rmano

Ctrl + V입력 하고 Enter를 누르면 무엇을 얻을 수 있습니까? 명령을 잘 실행할 수 있기 때문에 셸의 문제는 아닙니다.
Adaephon

2
OSX 상자를 (무의식적으로) 다시 시작하면 문제가 해결 된 것 같습니다 ... 그 중 하나 인 것 같습니다. 잘만되면 좋겠다.
benekastah

또한 저에게있어 유일한 것은 NVRAM의 클리어런스를 포함한 재시작이었습니다. 눌러 당신은 또한 OSX의 NVRAM 재설정 시동 소리를들을 직후 Command-Option-PR 키를 누르고
jonbros

답변:


192

다른 사람 이이 문제를 겪고 있다면 TERM 문제가 아닌 stty 터미널 라인 설정에 문제가있을 가능성이 큽니다. 이 문제가 다시 발생하면 달리기를 시도 stty sane하여 문제가 해결되는지 알려주십시오.


22
이것은 OS X에서도 작동합니다.
패트릭 버클리

1
나를 위해 일했습니다 (Mint 17.1).
Deleet

1
우분투 슈퍼맨에 작업
protoEvangelion

Mojave의 iTerm2에서 잘 작동합니다
Rakib

archlinux에서 키티를 위해 일했습니다
yukashima huksay

31

stty -a터미널 설정을 보려면 실행 하십시오. 내 의심은 귀하의 icrnl설정이 설정되어 있지 않으며 -icrnl일반적인 설정을 사용하는 대신 (빼기 기호가 꺼져 있음을 나타냄)으로 표시됩니다. 로그인 할 때 터미널이 정상적으로 설정되는 방법은 다음과 같습니다.

$ 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

그리고 줄 끝에 문제가 없습니다 : return (^ M) 또는 enter (^ J)는 입력 줄을 끝냅니다. 그러나 내가 icrnl꺼지면 프로그램과 대화 할 때마다 ^ M 코드가 갑자기 나타납니다.

$ 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

이 코드 icrnl는 "캐리지 리턴을 줄 바꿈으로 변환"을 의미하며 실행중인 프로그램에서 숨겨져 있으며 Unix가 실제로 ^ J를 원할 때 ^ M을 입력 할 수 있습니다. 이전 키보드에는 별도의 Return 및 Enter 키가 있었지만 (Return은 일반적으로 양식을 통해 고급으로 이동하여 Enter 키를 제출했습니다) 오늘날에는 일반적으로 하나의 줄 끝 키만 있으므로이 터미널 설정은 두 가지 의미를 결합하는 데 도움이됩니다.

stty icrnl명령을 사용자에게 추가 .profile하거나 .bashrc이것이 실제로 문제 설정이라는 것을 발견하면.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.