Cygwin bash 프롬프트는 같은 줄에 줄을 바꿉니다.


56

Cygwin bash 프롬프트를 사용하고 있으며 긴 명령의 경우 PS1을 단순히 '$'로 설정하더라도 다음 줄로가는 것과는 달리 동일한 줄에서 텍스트가 줄 바꿈됩니다.

스크린 샷이 있습니다.
스크린 샷


11
TERM환경 변수 는 무엇으로 설정되어 있습니까? Cygwin 콘솔의 경우이어야합니다 cygwin.
ak2

1
@ ak2 이것은 나를 위해 문제를 해결했습니다. 감사합니다. Mintty의 Cygwin.
JoshuaD

답변:


58

이미 MinTTY를 사용하고 있었고 PS1에서 줄 바꿈을 제거해도 도움이되지 않았습니다. 이 페이지 에 대한 조언 도움이되었습니다. 이 bash 명령을 실행했습니다.

kill -WINCH $$

제 경우에는 이것을 한 번 실행하면 로그 아웃했다가 다시 로그인 한 후에도 문제가 해결되었습니다. 이것이 항상 해당되는지 확실하지 않습니다.


1
로 판단 -WINCH하면 터미널 창 크기가 조정되었음을 bash 프로세스에 알립니다. 따라서 이것은 각 터미널 창의 크기를 조정 한 후에 수행해야합니다.
ivan_pozdeev

7
@ivan_pozdeev, 방금 vim이 열려있는 동안 크기를 조정해야한다는 것을 알았습니다 .vim은 신호를 가져 와서 새로운 크기로 다시 그립니다. 그러나 부모 프로세스로 전달되지 않으므로 bash는 여전히 크기를 생각합니다. vim은 vim이 열렸을 때의 화면입니다.
akatakritos

이것은 또한 나를 위해 일했다
konqui

이것은 @jtpereyda에게 감사했습니다.
Jason R. Mick

고마워, 이것은 분명히 문제였습니다 .vim에있는 동안 터미널의 크기를 조정하십시오. 이 버그를 고칠 수있을만큼 쉬울 것 같지만 모르겠습니다.
Iguananaut

22

나에게 해결책은 .bashrc에 다음 줄을 추가하는 것이 었습니다.

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

프롬프트에서 인쇄 할 수없는 문자는 \[... 로 묶어야합니다 \].


6
원래 질문에 대한 주석에서 @ ak2가 언급했듯이 export TERM = cygwin으로 문제를 해결하기에 충분합니다.
dregad

1
내 경우에는 충분하지 않았습니다. PS1에 \ [... \]로 묶이지 않은 이스케이프 시퀀스가 ​​포함되어 있으면 줄 바꿈 문제가 지속됩니다. 귀하의 경우 TERM env 변수를 설정하는 것으로 충분할 수 있지만 의심합니다.
digory doo

나를 위해 이것은 두 번째 줄이 첫 번째 줄을 덮어 쓰는 문제를 해결하지만 정확히 80 너비 터미널을 사용하지 않으면 커서 위치와 텍스트 오프셋이 여전히 불안정합니다 (cygwin64, mintty 2.3.7 사용)
MM

\ [... \]를 추가하면 문제가 해결되었습니다.
Trismegistos

8

MinTTY에서도 같은 문제가있었습니다. 문제는 아마도 기본 프롬프트 (PS1)와 관련이있을 수 있습니다.

나를위한 해결책은 PS1에서 마지막 '새 줄'문자를 제거하는 것입니다 ( '$'기호 바로 앞) :

user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '

user@host ~ $

참조 http://cygwin.com/ml/cygwin/2001-07/msg00140.html을 참조.

이 변경 사항을 영구적으로 유지하려면 내보내기 PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ ~ /.bashrc 파일에 $ '.


1
나를 위해 작동하지 않았다 ...
HDave

이것은 나를 위해 일했지만 마지막 줄 바꿈을 제거하는 것 외에도 Cygwin 터미널을 다시 시작해야했습니다.
christosc


5

@jtpereyda의 대답 은 확실히 표시에 있습니다. 그러나 어떤 이유로 나는 이것을 놓을 수 없었고 조금 더 깊이 파고 들었습니다.

이 주석을 확장 하면 vim (또는 쉘에서 tty를 제어하는 ​​다른 전체 화면 응용 프로그램)에서 터미널의 크기를 조정하면 결과 SIGWINCH가 종종 쉘로 전송 되지 않으므로 다시 제어 할 때 제어하지 않습니다. 터미널의 크기가 조정되었음을 알 수 없습니다.

터미널 크기를 조정할 때 ioctl(..., TIOCSWINSZ, ...)vim이 실행중인 마스터 pty 에서 on을 호출해야합니다 . 결과적으로 killpg(SIGWINCH)on vim의 프로세스 그룹이 생성됩니다.

문제는 vim이 실행 된 쉘과는 다른 자체 프로세스 그룹에서 실행되므로 bash 쉘은 SIGWINCH라인 / 컬럼을 수신 하지 않고 적절히 조정하지 않습니다.

영구적 인 해결 방법을 원하면에 추가 shopt -s checkwinsize하십시오 .bashrc. 그러면 bash ioctl(..., TIOCGWINSZ, ..)는 각 명령에서 돌아온 후 창 크기 ( )를 확인하고 해당 행 / 열을 업데이트합니다.


Vim은이 질문과 어떤 관계가 있습니까? OP는 vim을 사용하지 않습니다.
DavidPostill

1
나는 연결을보다 분명하게 만든 다른 질문을 언급했지만 OP의 문제의 가능한 원인은 vim과 같은 전체 터미널 응용 프로그램을 열고 터미널 크기를 조정 한 다음 종료하는 것입니다. 내가 설명했듯이 SIGWINCH는 쉘에서 보이지 않으므로 vim을 종료해도 여전히 터미널이 이전 크기라고 생각하여 다양한 줄 바꿈 문제가 발생합니다.
Iguananaut


2

터미널 설정에 문제가있을 수 있습니다 (아마도).
이미 세션을 종료하고 새 세션을 다시 시작하려고 시도했을 것입니다.

Cygwin 터미널에 대한 솔루션을 얻지 못했지만 MinTTY 를 사용해보십시오 (실제로는 더 좋습니다).


1
Cygwin에서 여러 시스템에 걸쳐이 문제가 발생하지만 MinTTY가 더 잘 보이고 래핑 문제를 해결합니다. 하나의 돌로 두 마리!
21:10에

MinTTY는 2011 년 후반부터 Cygwin의 기본 터미널입니다 .
휴 W

1

akatakritos가 언급 했듯이 vim이 열려있는 동안 터미널 크기를 조정했을 것입니다.

이 경우 터미널 크기를 한 번 더 조정하면 문제가 해결됩니다.


고마워! cygwin을 사용하지 않더라도 이것은 bash에서 "같은 줄에 줄 바꿈"문제를 해결했습니다. 단말기 창을 최대화하지 않은 다음 다시 최대화하면 문제가 사라집니다.
Nick Humphrey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.