如何编辑 $PS1 变量以使 bash 命令的输出是与该命令不同的颜色?

如何编辑 $PS1 变量以使 bash 命令的输出是与该命令不同的颜色?

如何编辑$PS1变量以使 bash 命令的输出是与该命令不同的颜色?例如,我希望命令为黑色,输出为绿色。

username$ seq 1 3
1
2
3

在上面的例子中,我希望seq 1 3是黑色,输出数字是绿色。

这是我当前的 $PS1 变量:

\[\e[1;0:31m\]\u \[\e[m\] \[\e[1;0:36m\] \@ \[\e[m\] \[\e[1;0:32m\]\W $ \[\e[m\]

答案1

您应该利用trap "changesColorHere" DEBUGPS1。在PS1变量中,您可以在其值的末尾指定颜色,其作用trap "" DEBUG是在执行另一个命令之前立即运行一个命令。因此,如果您运行will beforedf中指定的命令。trap "" DEBUGdf

您可以将PS1变量设置为此:

PS1="\[\e[1;0:31m\]\u \[\e[m\] \[\e[1;0:36m\] \@ \[\e[m\] \[\e[1;0:32m\]\W $ \[\e[1;35m\]"

通过此设置,您在提示后键入的所有输入都将被着色。

你可以设置trap "" DEBUG如下:

trap "echo -ne '\e[1;33m'"  DEBUG

通过此设置,输出为几乎您输入的每个命令都会被着色。

某些命令(例如lsdmesgjourncaltcl等)将使用它们配置的颜色显示输出。所以你必须使用以下方法禁用它们:

  1. 当你使用ls这个命令时通常是一个带有选项的别名--color=tty。因此,为了能够使用自定义颜色打印 ls 输出,您可以使用:
\ls #Add `\` before the ls command
ls --color=never ... # Add the option --color=never
  1. dmesg命令使用其自定义颜色打印输出,但您可以阻止使用它们并使用您的颜色:
dmesg --color=never #Add --color=never
  1. journalctl还可以使用自定义颜色打印其输出。尽管可以通过导出来禁用此功能,但export SYSTEMD_COLORS=false如果您只是使用journalctl输出,则会使用该less命令。所以我建议你使用:
export SYSTEMD_COLORS=false
journalctl  --no-pager
#Alternatively you can use:
journalctl | cat #This should be useful if there were commands whose page their
# output through `less` and they do not have an option like `--no-pager`

使用上面的设置我有:

在此输入图像描述

相关内容