!
현재 올바른 프롬프트 가 있습니다.다루기 힘든다음과 같이:
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이 아닌 종료 코드가 있는 경우 빨간색으로 표시합니다.