如何为当前终端生成特定的(命名的)转义序列?

如何为当前终端生成特定的(命名的)转义序列?

我最近看到一个技巧,可以让你“一般”输出终端控制代码(基于当前的 termcap/terminfo 设置),但找不到它。如果我没记错的话它可以让你做类似的事情

echo "$(some_command home)"

得到回显的将是转义序列的实际字节,这将导致$TERM光标移回原处。那条命令是什么?

答案1

我看到的命令是tput.人们可以使用它——就像我的问题一样:

echo -n "$(tput home)"

当然,这个特定的例子是多余的。将 stdout 运行到一个将写入其自己的 stdout 的tput参数中是浪费的。echo如果您需要生成一串,这可能更有意义echo -n "$(tput thing1)some text$(tput thing2)other text- 但正如 @icarus 在下面的评论中指出的那样,这会丢失任何定时知道的窍门tput

因此,只要可行,最好直接调用该实用程序:

tput clear
tput blink
echo "DANGER WILL ROBINSON"
tput bel
sleep 5
reset     # NOTE: this might be symlinked to tput also!

它不是核心/内置工具,而是作为 ncurses 的一部分提供,因此应该得到广泛使用。我找到了一个很好的介绍/概述这提供了一些背景知识,也显示了相关命令。和这个要点包含可以输出的所有命名“功能”的方便列表。

相关内容