/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

その結果、私のシェルプロンプトは2つの構成になります。 / etcのプロンプトが私のデフォルト設定とマージされました。

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

自分のホームディレクトリがデフォルトディレクトリを上書きするようにローカル設定をどのように変更しますか?

などのファイルを変更したくない場合、またはこれを行う必要がありますか?

答え1

PS1目的はPROMPT_COMMAND2つの異なる変数です。そして、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$ 

関連情報