我的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;
但是,当我执行命令
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\]\$ "
[
这种奇怪行为的原因是什么?
在breif中,在新的终端会话中, 第一个PS1没有显示颜色,但是放在同一bash_profile文件中的第二个PS1正在显示颜色。 但是第一个是在来源时显示颜色。
注意:我正在使用mac。 我也确保在bash_profile中设置了变量 但未设置颜色。
答案 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的调用方式。
在许多情况下,并非所有情况都是互斥的:
sh
的形式调用您需要知道哪些情况适用于您的调用,以确定要读取的文件。
man bash
并搜索调用,以获取确切的详细信息。
答案 2 :(得分:0)
我已经为xterm-256终端安装了日光化配色/主题。这是导致问题的原因。当我更改配色方案时,PS1可以正常工作。