适用于所有方案的相对 bash 颜色?

适用于所有方案的相对 bash 颜色?

我怎样才能在 bash 中使用“相对”颜色,而不是硬编码颜色?如果我指定使用黄色“\033[93m”,那么对于使用白色背景的人来说,它看起来很糟糕。

有没有办法指定不是颜色而是“样式”?例如“突出显示”或“重要”或“变暗”或“弃用”?

答案1

Bash 与此无关。bash(1)手册页中没有提到颜色。

如果您的脚本正在更改文本或背景颜色,它会通过发送 ANSI 颜色转义码来实现,这些转义码是控制字符字节,它会bash忽略并直接传递到您的终端仿真器,就像它发送希望终端显示的任何 ASCII 字符一样。您依靠终端仿真器来正确解释这些代码。

不幸的是,ANSI 颜色代码可以追溯到终端和 PC 显卡和显示器只能显示 8 种或 16 种颜色(如果有的话)的时代,因此您不能使用 ANSI 颜色代码来执行您的尝试。

因此,除非您自己构建所有基础设施(可以执行相对颜色的终端仿真器、用于将相对颜色传达给您的仿真器的新颜色转义码系统,以及可能相关的 terminfo/termcap 和其他终端相关的软件基础设施工作,以确保脚本可以可靠地识别用户正在使用了解这些新颜色技巧的终端仿真器),并强迫您的用户使用它,否则您可能不得不放弃。

答案2

找到了这个非常详细的页面诠释风格和色彩通过常见的终端。对于原始问题,强调一下,有几个技巧可以做到。请记住,这可能不适用于所有终端,正如 Spiff 所指出的那样,解释转义序列取决于终端。从该页面:

echo -e "Normal \e[1mBold"

echo -e "Normal \e[2mDim"

在我的终端上我也尝试过,\e[9结果出现了删除线文本。

使用这样的样式比使用颜色更好,因为除非您有意使用,否则您永远不会得到不可见的组合\e[8。如果终端忽略了某些样式,您将只看到纯文本。

相关内容