배쉬 : 마지막 명령의 출력이 줄 바꿈으로 끝나는 지 아는 방법?


10

대부분의 경우 명령 출력은 개행 문자로 끝납니다. 그러나 때로는 그렇지 않기 때문에 다음 쉘 프롬프트는 출력과 함께 같은 줄에 인쇄됩니다.

예:

root @ hostname [~] # echo -n hello
helloroot @ hostname [~] #

나는 항상 매우 성가신 것을 발견했습니다.
이제 PS1 변수의 시작 부분에 "\ n"을 추가 할 수 있었지만 대부분의 경우 필요하지 않은 추가 행을 인쇄합니다.

마지막 명령의 출력이 줄 바꿈으로 끝나는 지 여부를 알 수 있습니까?


솔루션 :
(Dennis에게 감사합니다)

PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '

수퍼 유저로 이동해야합니다.
ℝaphink

나는 당신의 버전을 좋아합니다! $()한 곳에서 사용 하고 다른 곳에서는 백틱을 사용 했습니다. $()둘 다 사용할 수 있습니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

알아. 그러나 저에게는 그렇게 읽는 것이 더 쉽습니다
GetFree

tput cols어쨌든 COLUMNS 변수의 값을 출력 하기 때문에 사용 하지 않으며 쉘 내장이 아니기 때문에 속도가 느립니다. 또한 삽입 된 공백을 삭제 하기 위해 \e[K(와 동일 tput el) 을 포함 하여 기본 경우에 복사하고 붙여 넣을 때 후행 공백이 많이 생기지 않도록해야합니다. 마지막으로, 당신은 사이의 모든 마법을 묶어야합니다 \[\]두 번째 추측 커서 위치에 노력할 것 또는 다른 bash는 그것을 당신이 명령 / 역사를 편집 엉망 수 있습니다.
dlitz 2016 년

1
모든 것은 다음과 같이 할 수 있습니다 :PS1='\[\e[7m%\e[m$( printf "%*s" "$((COLUMNS-1))" "" )\r\e[K\]\u@\h [\w]\$ '
dlitz

답변:


6

zshBash 에서 기능을 에뮬레이트하기 위해 다음을 실험했습니다 .

$ unset PROMPT_SP; for ((i = 1; i <= $COLUMNS + 52; i++ )); do PROMPT_SP+=' '; done
$ PS1='\[\e[7m%\e[m\]${PROMPT_SP: -$COLUMNS+1}\015$ '

역 비디오 퍼센트 부호를 발행 한 후 다음 줄로 줄 바꿈하기 위해 공백이 이어지고, 캐리지 리턴, 달러 부호 및 공백이 뒤 따릅니다. "\ 015"뒤에 프롬프트 이스케이프를 추가하여 프롬프트를 사용자 정의 할 수 있습니다.

이것을 사용하는 것은 터미널이 오른쪽 여백 줄 바꿈 (자동 여백)을 처리하는 방법에 따라 다릅니다. PROMPT_SP의 길이는 임의적이지만, 최소 80 이상이거나 일반적인 터미널 너비와 관계가 없습니다. for루프가 실행될 때까지 $ COLUMNS가 아직 설정되지 않은 경우 해당 값을 하드 코딩해야 할 수도 있습니다 ~/.bashrc. shopt -s checkwinsize아직 설정하지 않은 경우 원할 수 있습니다 .


왜 누군가가 각 답변을 다운 보트했는지 궁금 합니다. 흠 ... 설명이 없습니다. 도움이되었습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

다음은 루프를 사용하지 않고 패드 문자열을 생성하는 다른 방법입니다.printf -v PROMPT_SP '%*s' $((COLUMNS + 52)) ''
추가 통지가있을 때까지 일시 중지되었습니다.

"역 비디오 퍼센트 부호"란 무엇입니까? '동영상'이라는 단어가 혼란스러워서 Google에서 답을 찾지 못했습니다.
davidchambers

1
@davidchambers : 문자의 배경이 전경색으로 표시되고 문자 자체는 배경색으로 표시됩니다. 참조 man 5 terminfo이 용어를 사용하여 약간의 설명서를 참조하십시오 "역상"를 검색합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

0

불가능합니다. Bash 자체는 시작된 프로그램의 출력을 처리하거나 보지 않습니다.

그냥 나에게 발생 할 수 세트에 프로그램을 작성하는 것이 가능 PROMPT_COMMAND커서의 현재 위치를 확인하고 커서가 왼쪽 가장자리가 아닌 경우 줄 바꿈을 발행 할로를.


좋은 생각. 유일한 문제는 ... 커서 위치를 알 수 있습니까?
GetFree

0

zsh문제를 해결하려고합니다. 마지막 출력이 줄 바꿈없이 끝나면 다음과 같은 결과가 나타납니다.

$ echo -n 'abc'
abc%
$ 

어디 %용도는 배경 / 전경을 반전. bash어떤 식 으로든 휴대용인지 확실하지 않습니다 .

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