在 Windows 操作系统上,我可以仅输入color a
或color b
等color c
来临时更改终端中的字体颜色。
bash 终端中有执行此操作的命令吗?
我不想做永久性的改变,只要公开会议就足够了。
答案1
你指的是命令期望值为 0-f(即十进制 0 到 15)。类似的命令将使用tput
:
tput setaf 10
(“a”是 10 的十六进制),对于前景颜色和
tput setab 10
为了背景颜色。这些是分开的术语信息能力。
该示例假设您的终端描述至少有 16 种颜色。如果只有8个,tput
不会注意到,但结果会不理想。你可以通过以下方式看到这个
tput colors
默认情况下,tput
使用 的当前值来$TERM
选择终端描述。您可以使用该-T
选项覆盖它。例如,如果您正在使用xterm
(与设置为“xterm”的其他终端相反TERM
),您可以使用xterm-16color
终端描述,如以下屏幕截图所示:
(您可能会看到tput
第 15 行没有任何有用的效果,这是预期的,因为10
超出 8 种颜色的范围)。
终端描述,是否xterm
或者xterm-16color
(或者xterm-256color
) 讲述tput
如何创建可写入终端的转义序列。您的 bash 提示符也可能会发送转义序列,设置或重置颜色。如果您tput
在 shell 脚本中调用并回显文本,您可能会看到彩色文本,而相同的命令(由 bash 提示符分隔)的行为方式可能不同。此外,某些程序(例如ls
)会设置/重置颜色。这些不同的应用程序只能共享一种终端的颜色状态;终端不会自动在它们之间切换。
测试 shell 脚本比依赖 shell 提示符的详细信息更具可预测性。这是一个例子
#!/bin/sh
case $TERM in
xterm*)
TERM=xterm-256color
;;
linux*)
TERM=linux-16color
;;
esac
export TERM
for p in $(seq 0 15)
do
tput setab $p
for q in $(seq 0 15)
do
tput setaf $q
printf '%x%x' $p $q
done
tput sgr0
printf '\n'
done
以及 xterm 中的屏幕截图: