为什么在 .bashrc 中设置提示实际上不会影响提示?

tom*_*afe 6 linux bash

我试图通过.bashrc在我的主目录中插入以下行来设置我的 shell 提示:

export PS1="\[\e[01;36m\][\u]\[\e[0m\] \[\e[01;37m\]\W\[\e[0m\] $ "
Run Code Online (Sandbox Code Playgroud)

我保存了这个文件并重新打开 bash,但它没有改变。当我发出命令时echo $PS1,控制台显示

\h:\w$
Run Code Online (Sandbox Code Playgroud)

这是默认提示。我环顾四周.bashrcPS1除了上面显示的我插入的行之外,没有看到在任何地方设置了环境变量。

这适用于我的本地机器,但我在远程服务器上的帐户不会坚持。如何使自定义提示生效?

谢谢!

ter*_*don 4

这里的问题是登录 shell 和交互式 shell 之间的区别。请参阅此处了解摘要。

~/.bashrc仅在启动交互式(非登录)shell时读取。当您ssh进入远程计算机时,您正在运行登录shell,因此将读取~/.bash_profile~/.bash_login~/.profile(按该顺序)。bash您可以通过登录远程服务器后运行来检查这一点,这将启动一个交互式 shell,~/.bashrc将被读取并显示您修改的提示符。

要更改出现的提示ssh,请$PS1设置~/.bash_profile

export PS1="\[\e[01;36m\][\u]\[\e[0m\] \[\e[01;37m\]\W\[\e[0m\] $ "
Run Code Online (Sandbox Code Playgroud)

或者,您可以~/.bashrc~/.bash_profile或致电~/.profile

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi
Run Code Online (Sandbox Code Playgroud)

if [ "$BASH" ]; then使用时很有用,~/.profile因为它将被非 bash shell 读取。