如何编辑$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" DEBUG
和PS1
。在PS1
变量中,您可以在其值的末尾指定颜色,其作用trap "" DEBUG
是在执行另一个命令之前立即运行一个命令。因此,如果您运行will beforedf
中指定的命令。trap "" DEBUG
df
您可以将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
通过此设置,输出为几乎您输入的每个命令都会被着色。
某些命令(例如ls
、dmesg
、journcaltcl
等)将使用它们配置的颜色显示输出。所以你必须使用以下方法禁用它们:
- 当你使用
ls
这个命令时通常是一个带有选项的别名--color=tty
。因此,为了能够使用自定义颜色打印 ls 输出,您可以使用:
\ls #Add `\` before the ls command
ls --color=never ... # Add the option --color=never
- 该
dmesg
命令使用其自定义颜色打印输出,但您可以阻止使用它们并使用您的颜色:
dmesg --color=never #Add --color=never
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`
使用上面的设置我有: