执行 `ls` 命令后前景色发生变化

执行 `ls` 命令后前景色发生变化

我使用命令更改了 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但由于我在这方面缺乏经验,我可能无法完美地使用它。

后来,我注意到执行bashls 命令后前景会恢复为我想要的颜色。I decided against using bash after ls

同时,我找到了一种方法:

  1. 首先,我将命令放在echo -ne '\e[0;31m'shell 脚本中,然后将 shell 脚本添加到.bashrc
  2. 其次,我定义了一个函数,以便bash随后立即执行ls

bls() {

 ls "$@" && echo -ne '\e[1;31m';
 }
  1. 我将上述函数导出为:

    export -f bls

因此,现在我必须执行bls列出目录而不更改前景色的操作。这实际上并没有解决问题ls,但它确实为我找到了另一种方法。我只需要再输入一个字母bls

相关内容