例如,如果我想要粗体绿色的前缀,我可能会这样做Green=$(tput bold; tput setaf 2)
。这会将 $Green 设置为“\E[1m\E[32m”。但在 Ansi 终端上,它也可以很容易地变成“\E[1;32m”。
这可以用 tput 来完成吗,还是我要求太多了?
答案1
不, tput 不会(通常)执行此操作,因为您可能只使用预定义/标准终端功能,而这些功能不具有该组合。
使用 ncurses,您可以使用用户定义的功能定义自己的终端描述,并且 tput 可以使用它。
像这样的东西会结合颜色:
infocmp -x >foo
printf '\tfgbg=\\E[3%p1%;4%p2%dm,\n' >>foo
sudo tic -x foo
然后(示例为 8 色)
tput fgbg 4 0
会将前景设置为蓝色,背景设置为黑色。然而,还有很多可能性。使用预定义的功能需要花费更少的精力。
答案2
另一种看待这个问题的方式是知道你甚至可以以这种方式组合控制序列是特定于终端系列的事情,这不是 termcap/terminfo 模型。虽然已有 44 年历史的 ECMA-48 控制序列模型如今已很普遍,但 termcap/terminfo 的设计允许不遵守该模型的终端类型。实际上并不总是可以以这种方式组合控制序列。