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.