실패하면 셸에서 이전 명령의 종료 코드를 인쇄하고 싶습니다. 그래서 PS1
변수를 다음과 같이 변경했습니다 ./etc/bash.bashrc
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w [$?] \$ '
#_______________________________________________^^^^_____
그러나 항상 이전 명령의 종료 코드를 인쇄합니다. $?
같음 인 경우 0
인쇄되지 않도록 템플릿에 조건을 추가하는 방법이 있습니까?$?
답변1
다음과 같이 내부적으로 조건과 표현식을 만들 수 있습니다 $()
.
echo "$( var=2; echo $var)"
귀하의 예에서는 PS1
다음과 같이 변수를 변경할 수 있습니다.
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(
status=$?; (( status != 0 )) && echo "[$status] "
)\$ '
좋다:
jackman@b7q9bw1:~ $ echo hello
hello
jackman@b7q9bw1:~ $ sh -c 'exit 42'
jackman@b7q9bw1:~ [42] $
답변2
Bash는 변수에서 코드를 실행합니다.PROMPT_COMMAND
프롬프트를 인쇄하기 전에. 수행할 수 있는 작업 중 하나는 프롬프트의 구성 요소를 계산한 다음 설정을 통해 해당 구성 요소를 조합하는 것입니다 PS1
.
PROMPT_COMMAND_set_status () {
if ((last_status == 0)); then
PS1_status=
else
PS1_status="[$last_status] "
fi
}
PS1=PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $PS1_status\$ '
PROMPT_COMMAND='last_status=$?; PROMPT_COMMAND_set_status'