PS1未设置颜色

时间:2018-10-11 16:19:21

标签: linux bash unix

我的bash_profile文件中有一个PS1变量

orange=$(tput setaf 166);
yellow=$(tput setaf 228);
green=$(tput setaf 71); 
white=$(tput setaf 15); 
bold=$(tput bold); 
reset=$(tput sgr0); 
PS1="\[${bold}\]"; 
PS1+="\[${orange}\]\u"; # username 
PS1+="\[${white}\]@"; 
PS1+="\[${yellow}\]\h "; # host 
PS1+="\[${green}\]\w"; # working directory 
PS1+="\[${white}\]\$ \[${reset}\]"; # '$' (and reset color) 
export PS1; 

当我打开新的终端实例时,它会正确显示除颜色以外的所有内容。 PS1 set without color - new terminal instance

但是,当我执行命令

source .bash_profile

颜色在起作用。如果我打开一个新标签,它就会消失。

source .bash_profile

但是,在一个新的终端实例中,不执行source命令, 颜色适用于

export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

[New terminal instance - without source- new PS1 variable[3]

这种奇怪行为的原因是什么?

在breif中,在新的终端会话中, 第一个PS1没有显示颜色,但是放在同一bash_profile文件中的第二个PS1正在显示颜色。 但是第一个是在来源时显示颜色。

注意:我正在使用mac。 我也确保在bash_profile中设置了变量 但未设置颜色。

3 个答案:

答案 0 :(得分:1)

您应该调查更多(是的,更多)。

在每种情况下,您都应使用printf "%q\n" "$PS1"来查看变量PS1的确切值(带有不可转义的转义字符)。您是否只是想将颜色添加到已经设置的PS1变量中?因此,如果您获得未着色的输出,那可能是因为未执行您的代码而仍设置了原始值吗?这样就不会执行PROFILE脚本。

.bash_profile通常仅在启动 login -shell时执行。如今,许多发行版都做得不好,并且在此问题上充满了变通办法,因此它们通常包含.bashrc个文件,这些文件在开始时就是.bash_profile的来源。 .bashrc来自每个新Shell,因此,有效地,您的.bash_profile也可能来自每个Shell。

我猜想您的.bashrc首先 .bash_profile然后PS1设置为与您类似的值没有颜色。但这当然是猜测。

答案 1 :(得分:1)

我怀疑在OP的情况下,只需要使用~/.bashrc而不是~/.bash_profile来设置颜色。

这是工作方式:

设置bash环境涉及许多文件。

/etc/profile设置系统范围的配置文件

~/.bash_profile~/.bash_login~/.profile-默认情况下,当bash作为 login shell调用时,将读取这些文件

~/.bashrc-除非bash以sh调用或bash以bash --norc

调用,否则始终会被读取

~/.bash_logout-登录Shell清理

~/.inputrc-readline初始化文件。

哪个文件以及读取这些文件的顺序取决于bash的调用方式。

在许多情况下,并非所有情况都是互斥的:

  • 登录外壳
  • 交互式外壳
  • 非交互式外壳
  • posix模式
  • 通过标准输入连接到网络连接调用bash(是 它会知道的)
  • bash以sh的形式调用
  • bash的有效uid / gid不等于真实的uid / gid

您需要知道哪些情况适用于您的调用,以确定要读取的文件。

man bash并搜索调用,以获取确切的详细信息。

答案 2 :(得分:0)

我已经为xterm-256终端安装了日光化配色/主题。这是导致问题的原因。当我更改配色方案时,PS1可以正常工作。