값에 따라 프롬프트 수정

값에 따라 프롬프트 수정

.bash_profile에 다음과 같이 환경 변수를 정의한다고 가정해 보겠습니다.

PS1='\[\e[31;1m\][\u@\h \T \w] \[\e[0m\]'

이 변수를 사용하면 Linux 프롬프트에 다음과 같은 특정 정보가 표시됩니다.

[jeff@node21 01:48:30 ~] [jeff@node22 01:48:30 ~] [jeff@node23 01:48:30 ~] [jeff@master 01:48:30 ~]

"마스터"라는 단어가 나타날 때 대문자로 표시하고 싶습니다(해당 노드에서는 아무 작업도 수행하지 않을 것이며 rsh다른 노드에서 작업을 수행하는 것을 잊어버렸을 때 눈에 띄기를 원합니다).

"master"라는 단어가 포함되어 있지 않기 때문에 sed변수에 사용할 수 없습니다 .PS1

마지막으로,노드 "마스터"에 있을 때 프롬프트를 대문자로 표시하고 싶습니다. 변수 "PS1"을 평가하고 문자열을 조작한 다음 프롬프트가 작동하도록 다시 할당하는 방법이 있습니까?

답변1

최신 버전을 사용한다고 가정하면 대신 에 변수를 사용하여 bash이 작업을 수행할 수 있습니다 .PROMPT_COMMANDPS1\h

PROMPT_COMMAND='
  myhost=$(hostname)
  if [[ $myhost == master ]]; then
    myhost=${myhost^^}
  fi
'

PS1='\[\e[31;1m\][\u@$myhost \T \w] \[\e[0m\]'

PROMPT_COMMAND각 프롬프트가 작성되기 전에 그 안의 모든 항목이 실행됩니다. 위의 정의는 의 myhost출력을 설정합니다 hostname.myhost주인, ${var^^}확장하면 대문자가 됩니다.

답변2

또 다른 방법은

PS1='\[\e[31;1m\][\u@$(hostname | perl -pe "\$_ = uc if m/master/") \T \w] \[\e[0m\]'

내 조언이 Thor의 조언만큼 체계적이지 않다는 점은 인정하지만 기본적으로 알아두면 좋습니다.

$(cmd)

는 일반적인 명령 대체 구문입니다 bash.

좋은 것도 있어요어떻게bash 프롬프트의 구성만 처리합니다. 이것은 확실히 읽을 가치가 있습니다.

관련 정보