我使用命令更改了 shell 的前景色echo -ne '\e[1;31m'
,但当我执行ls
命令时,前景色又恢复到原来的颜色。执行其他命令时不会发生这种奇怪的行为。我不知道这背后的原因。
请对此作出解释并提出补救措施。谢谢
我在用Ubuntu 14.10。
编辑-我尝试通过设置别名来删除白色前景的转义序列ls
:
alias ls='ls --color=auto |sed -r 's/\x1b[37m]//''
但是,这也有一个问题,ls
输出的所有目录名称和文件名都只有单一颜色,即,不是所有项目的默认颜色。这很奇怪,因为我只删除了[37m
白色前景,但它删除了所有的颜色。
答案1
设置颜色的命令可以通过发送序列ESC [ 0 m
来重置终端的当前属性来完成。最简单的方法是更改 shell 提示符,以始终将颜色设置回您想要的颜色。
添加到您的.bash_profile
:
export PS1='\e[1;31m'"$PS1"
答案2
更新-由于 waltinator 表示在命令bash
之后立即执行命令ls
会创建子 shell,这可能会消耗资源,因此我不得不寻找其他解决方案。我尝试echo -ne '\e[1;31m'
在 ls 命令之后执行 light,因此我将其放入bls
函数中。
我不知怎么就找到了自己的解决方案。meuh 和 waltinator 建议我查找ls
命令发送的转义序列,我甚至找到了这些。我尝试使用 删除转义序列,sed
但由于我在这方面缺乏经验,我可能无法完美地使用它。
后来,我注意到执行bash
ls 命令后前景会恢复为我想要的颜色。I decided against using bash after ls
同时,我找到了一种方法:
- 首先,我将命令放在
echo -ne '\e[0;31m'
shell 脚本中,然后将 shell 脚本添加到.bashrc
。 - 其次,我定义了一个函数,以便
bash
随后立即执行ls
:
bls() {
ls "$@" && echo -ne '\e[1;31m'; }
我将上述函数导出为:
export -f bls
因此,现在我必须执行bls
列出目录而不更改前景色的操作。这实际上并没有解决问题ls
,但它确实为我找到了另一种方法。我只需要再输入一个字母bls