나는 때때로 다양한 응용 프로그램에서 이것을 발견했습니다. 나는 종종 이것이 출력이 일찍 취소되고(예: ctrl+c), zsh가 개행 문자를 채우고 있기 때문이라고 생각합니다. 그러나 이제 bash에서는 수행되지 않는 것 같기 때문에 호기심이 더 커졌습니다.
다루기 힘든
세게 때리다
이 Sequence
프로그램은 컴파일하고 실행되는지 확인하기 위해 Java 인증을 위해 읽고 있던 책에서 가져온 것입니다. 나는 그것이 println()
패키지/클래스의 메소드를 사용하지 않는다는 것을 알았습니다 . System.out
대신 일반 old 를 사용합니다 print()
.
줄 바꿈이 없기 때문에 이 기호가 표시됩니까?
답변1
네, 이것은 "부분 선"이기 때문에 발생합니다. 그리고 기본적으로zsh 덮어쓰라는 메시지를 피하려면 다음 줄로 이동하세요..
부분 줄을 유지하는 경우 기본적으로 부분 줄 끝에 반전+굵은 문자가 표시됩니다. 일반 사용자의 경우 "%", 루트의 경우 "#"이 표시됩니다. 설정된 경우 쉘 매개변수 PROMPT_EOL_MARK를 사용하여 부분 줄 끝 표시 방법을 사용자 정의할 수 있습니다.
답변2
zsh
fish
이는 명령 출력에서 종료되지 않은 줄을 명확하게 볼 수 있는 특정 기능이었습니다 .
기존 셸에서는 명령이 마지막 개행 문자 뒤에 일부 데이터를 출력하는 경우, 즉 터미널 커서를 벗어나는 경우아니요줄의 시작 부분에서 쉘의 다음 프롬프트는 결국 다음과 같이 종료되지 않은 마지막 줄에 추가됩니다.
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