ZSH가 강조 표시된 백분율 기호로 줄을 끝내는 이유는 무엇입니까?

ZSH가 강조 표시된 백분율 기호로 줄을 끝내는 이유는 무엇입니까?

나는 때때로 다양한 응용 프로그램에서 이것을 발견했습니다. 나는 종종 이것이 출력이 일찍 취소되고(예: ctrl+c), zsh가 개행 문자를 채우고 있기 때문이라고 생각합니다. 그러나 이제 bash에서는 수행되지 않는 것 같기 때문에 호기심이 더 커졌습니다.

다루기 힘든

다루기 힘든

세게 때리다

여기에 이미지 설명을 입력하세요.

Sequence프로그램은 컴파일하고 실행되는지 확인하기 위해 Java 인증을 위해 읽고 있던 책에서 가져온 것입니다. 나는 그것이 println()패키지/클래스의 메소드를 사용하지 않는다는 것을 알았습니다 . System.out대신 일반 old 를 사용합니다 print().

줄 바꿈이 없기 때문에 이 기호가 표시됩니까?

답변1

네, 이것은 "부분 선"이기 때문에 발생합니다. 그리고 기본적으로zsh 덮어쓰라는 메시지를 피하려면 다음 줄로 이동하세요..

부분 줄을 유지하는 경우 기본적으로 부분 줄 끝에 반전+굵은 문자가 표시됩니다. 일반 사용자의 경우 "%", 루트의 경우 "#"이 표시됩니다. 설정된 경우 쉘 매개변수 PROMPT_EOL_MARK를 사용하여 부분 줄 끝 표시 방법을 사용자 정의할 수 있습니다.

답변2

zshfish이는 명령 출력에서 ​​종료되지 않은 줄을 명확하게 볼 수 있는 특정 기능이었습니다 .

기존 셸에서는 명령이 마지막 개행 문자 뒤에 일부 데이터를 출력하는 경우, 즉 터미널 커서를 벗어나는 경우아니요줄의 시작 부분에서 쉘의 다음 프롬프트는 결국 다음과 같이 종료되지 않은 마지막 줄에 추가됩니다.

bash-4.4$ printf XXX
XXXbash-4.4$

이로 인해 프롬프트가 중단되고 놓치기 쉽습니다. XXX특히 이보다 더 이국적인 프롬프트가 있는 경우 더욱 그렇습니다. 또한 커서 위치에 영향을 미쳐 커서를 이동할 때 디스플레이 결함이 발생할 수 있습니다.

zsh출력에 %굵게 강조 표시된 문자가 있는 종료되지 않은 행이 있음을 표시하고 다음 행의 시작 부분에 다음 프롬프트를 표시하여 이 문제를 해결하십시오.

zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$

%마지막에 역방향 비디오를 출력하여 이를 수행합니다.모든명령(각 프롬프트 앞), 그 뒤에 79개의 공백(80자 너비의 터미널 가정), CR 문자(커서를 첫 번째 열로 돌아가게 하는 문자) 및 끝까지 지우는 시퀀스가 ​​옵니다. 라인(다음은 프롬프트입니다).

이런 식으로 끝나지 않은 줄이 있는 경우 커서가 첫 번째 위치에 있지 않으므로 이 80개의 문자는 커서를 다음 위치로 이동시킵니다.다음라인(그리고 %유지됩니다). 그렇지 않은 경우 해당 공간 %과 79개의 공백이 한 줄에 표시되어 삭제됩니다.

이제 이는 터미널이 실제로 래핑된 경우에만 작동합니다(예: after는 제대로 작동하지 않습니다 tput rmam). 느린 터미널(예: 9600 보드 직렬 회선)을 사용하는 경우 실제로 이러한 항목이 %표시되고 각 명령 후에 제거되어 zsh기능을 비활성화할 수 있습니다.

set +o prompt_cr +o prompt_sp

이런 방식으로 zsh기존 쉘처럼 작동합니다.

$PROMPT_EOL_MARK변수를 사용하여 이 태그를 변경할 수도 있습니다 .

답변3

설명하다:

%줄 끝에 있는 퍼센트 기호( )는 개행 문자( \n)가 누락되었음을 나타냅니다.

예를 들어, printf "foo"결과는 다음과 같습니다 foo%. 문자열에 개행 문자를 추가하면 printf "foo\n"가 생성됩니다 foo.

백분율 기호( )를 제거하는 방법 %:

백분율 기호를 제거하려면 ; echo.

예:

# Issue
$ print -n "foo"
foo%

# Solution
$ print -n "foo"; echo
foo

관련 정보