/etc/bashrc는 홈 .bashrc의 설정을 무시합니다.

/etc/bashrc는 홈 .bashrc의 설정을 무시합니다.

내 홈 디렉터리의 .bashrc에 다음 프롬프트 코드가 있습니다.

PS1_TIME='\033[01;31m\]\t \033[01;32m\]'
PS1_USERNAME='\[\e[1;36m\]\u\e[1;37m\]@\e[1;32m\]\h\[\033[00m\]'
PS1_LOCATION='\[\033[01;34m\]\w\[\033[00m\]'

PS1=$PS1_TIME$PS1_USERNAME':'$PS1_LOCATION'\n\$ '
PS2='\[\033[01;36m\]>'

또한 /etc/bashrc에 다음 구성이 있습니다.

# are we an interactive shell?
if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*|vte*)
      if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
      elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
          PROMPT_COMMAND="__vte_prompt_command"
      else
          PROMPT_COMMAND='printf "1\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
    screen*)
      if [ -e /etc/sysconfig/bash-prompt-screen ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
      else
          PROMPT_COMMAND='printf "2\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
    *)
      [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
      ;;
    esac
  fi

결과적으로 내 쉘 프롬프트는 두 가지로 구성됩니다. /etc의 프롬프트가 내 기본 설정과 병합되었습니다.

[PS1 from ect][PS1 from home dir]:

내 홈 디렉터리가 기본 디렉터리를 재정의하도록 로컬 설정을 어떻게 변경합니까?

등의 파일을 변경하고 싶지 않거나 이 작업을 수행해야 합니까?

답변1

PS1목적 이 PROMPT_COMMAND다른 두 가지 변수입니다. 그리고,Bash 매뉴얼에 나와 있듯이:

PROMPT_COMMAND

$PS1설정된 경우 이 값은 각 기본 프롬프트( )를 인쇄하기 전에 실행되는 명령 으로 해석됩니다 .

이는 PROMPT_COMMAND프롬프트로 사용하기 위한 것이 아니라 실제 프롬프트가 인쇄되기 전에 실행되는 명령으로 사용됩니다.

이 문제를 해결하려면 값을 편집하지 않으려는 경우 로컬에서 null 값을 설정 해제하거나 할당 /etc/bashrc해야 합니다 .PROMPT_COMMAND.bashrc

unset PROMPT_COMMAND
# or
PROMPT_COMMAND=

대화형 세션의 예( foobar$초기 프롬프트):

foobar$ printf 'PROMPT_COMMAND: [%s]\nPS1: [%s]\n' "$PROMPT_COMMAND" "$PS1"
PROMPT_COMMAND: [printf foo]
PS1: [bar$ ]
foobar$ 

설정되지 않음 PROMPT_COMMAND:

foobar$ unset PROMPT_COMMAND
bar$ 

null 값을 할당합니다 PROMPT_COMMAND.

foobar$ PROMPT_COMMAND=
bar$ 

관련 정보