연속적인 "올바른" 명령의 수를 계산하기 위해 bash PS1을 만듭니다.

연속적인 "올바른" 명령의 수를 계산하기 위해 bash PS1을 만듭니다.

$?내 목표는 단축된 사용자 이름, 단축된 경로를 파란색으로 표시하고 명령을 잘못 입력할 때마다 재설정되는 카운터 변수를 표시하는 bash 프롬프트를 만드는 것입니다( 엄격히 동일하지는 않지만 확인하는 데 사용하겠습니다 ).

현재 나는 다음을 ~/.bashrc가지고 있습니다:

counter=0
#should increment counter if no errors, else reset counter
PROMPT_COMMAND="if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi"
PS1='(${USER:0:3}@\[\e[0;34m\]$(basename $(dirname $PWD))/$(basename $PWD)\[\e[m\])[$counter]\\$ '

이는 다음을 보여줍니다.

(use@//home)[17]$

내 주요 문제는 0이 아닌 종료 상태를 얻을 때 카운터가 0으로 재설정되지 않는다는 것입니다. PROMPT_COMMAND예를 들어 , 실패한 명령 이후에 명령을 실행할 수 있으며 aasdjfasdfecho $counter명령은 표시됩니다 0(실제로는 1PROMPT_COMMAND가 즉시 증가시키기 때문에 a입니다).

내가 가진 또 다른 작은 문제는 루트 디렉토리에서 내 프롬프트가 표시된다는 것입니다.

(use@///)[11]$

이는 이상적이지 않습니다(3/). 나도 이 문제를 어떻게 고칠지는 모르겠지만 적어도 큰 문제는 아니다.

PROMPT_COMMAND가 카운터를 올바르게 증가시키고 재설정하도록 하려면 어떻게 해야 합니까?

편집하다:이것은 내 PS1이며 다른 사람이 궁금해할 경우를 대비해 내가 원하는 모든 작업을 수행합니다.

counter=0
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi;'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '

답변1

PROMPT_COMMAND를 다음으로 변경합니다.

PROMPT_COMMAND='if [ $? -eq 0 ]; then counter=$((counter+1)); else counter=0; fi'

조기 확장을 방지하려면 작은따옴표를 사용 $?하고 증가된 값에는 직접 할당을 사용하십시오 counter.

관련 정보