프롬프트 오류 코드

프롬프트 오류 코드

!현재 올바른 프롬프트 가 있습니다.다음과 같이:

export RPS1="%B%F{red}!%f%b"

내가 사용할 때, 그리고 명령 기록은 (안타깝게도) 전체 창에서 동기화되지 않습니다. 이 숫자는 나에게 거의 쓸모가 없습니다.

RPS1설정 ?하고 $?표시 하려고합니다반환 코드/오류 수준성공하지 못한 채 명령을 받았습니다.

다음과 같이 설정해야 했던 것으로 기억됩니다.

setopt promptbang

!보간(해석, 확장)을 수행합니다 .

이전 명령의 결과가 오류 번호임을 나타내는 프롬프트를 명령줄 오른쪽에 구현하는 방법.

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

현재 프롬프트의 샘플 스크린샷에는 >, >>, !as $PS1, $PS2및 가 포함되어 있습니다 $RPS1.

답변1

이전 명령의 반환 상태를 표시하려면 다음을 사용할 수 있습니다.빨리 탈출해라 %?.

RPS1='%B%F{red}%?%f%b'

종료 상태에 따라 색상을 전환할 수도 있습니다.

RPS1='%B%(?.%F{green}.%F{red})%?%f%b'

또는 명령이 오류를 반환하면 아무것도 표시하지 않습니다.

RPS1='%(?..%?)'

%?계산 결과가 이면 출력은 녹색이고 0, 그렇지 않으면 빨간색입니다.


임의의 매개변수(예: )를 바꾸려면 $?이 옵션을 활성화해야 합니다 PROMPT_SUBST.

setopt promptsubst

이 경우 선언 시 매개변수가 바뀌는 것을 방지하기 위해 매개변수를 완전히 인용해야 합니다. 예를 들어, 작은따옴표를 사용하거나 $내부 \큰따옴표를 사용하여 인용하십시오.

RPS1='$?'
RPS1="\$?'

참고: RPS1이 작업을 수행하려면 내보내기(또는 기타 쉘 구성 매개변수)가 필요하지 않습니다.

답변2

${?##0}0이 아닌 PS1종료 코드를 표시할 위치에 넣으면 됩니다 . 이전 명령의 종료 코드가 0인 경우 빈 문자열로 잘립니다( 0빈 ​​문자열을 얻으려면 선행 0을 모두 제거).

user@host:~
$ bash
user@host:~
$ exit 4
logout
user@host:~ 4
$ 

PS1내 관련 섹션에는 \e[31m${?##0}\n\[\e[$(((($?>0))*31))m\]. 이전 명령에 0이 아닌 종료 코드가 있는 경우 빨간색으로 표시합니다.

관련 정보