我在主目录的 .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
结果是我的 shell 提示符配置为两个:来自 /etc 的提示符与我的主设置合并
[PS1 from ect][PS1 from home dir]:
如何更改我的本地设置,以便我的主目录将覆盖默认目录?
我不想更改 etc 中的文件还是必须这样做?
答案1
PS1
和PROMPT_COMMAND
是两个具有不同目的的不同变量。和,正如 Bash 手册所述:
PROMPT_COMMAND
如果设置,该值将被解释为在打印每个主提示 (
$PS1
) 之前执行的命令。
请注意,这PROMPT_COMMAND
并不是要用作提示符,而是用作在打印实际提示符之前执行的命令。
要解决此问题,如果您不想编辑您的/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$
为 分配空值PROMPT_COMMAND
:
foobar$ PROMPT_COMMAND=
bar$