进程运行时可以更新终端窗口标题吗?

进程运行时可以更新终端窗口标题吗?

我正在尝试在终端中为自己设置一个小番茄/倒计时器。

这条评论on Superuser 提供了一个方便的小 shell 函数,可以充当倒计时器,这printf是 STDOUT 的剩余时间(太棒了)。我在想,如果我能在终端模拟器选项卡的标题中看到实时倒计时,那就更好了,这样我就可以监控剩余时间,而不必在选项卡之间来回切换。

它出现环境PROMPT_COMMAND变量可用于更新窗口标题,但由于其内容已执行仅在 Bash 显示提示之前,它无法在进程运行时实时更新标题(据我所知)。

有什么办法可以做到这一点吗?

(我突然想到,我可以通过在 tmux 中拆分一个新窗格来更轻松地解决这个问题,但我使用的是小屏幕,并且我希望能够节省所有屏幕空间。)

答案1

终端代码可能是您所需要的,请参阅http://wiki.bash-hackers.org/scripting/terminalcodeshttps://en.wikipedia.org/wiki/ANSI_escape_code欲了解详细信息(或http://invisible-island.net/xterm/ctlseqs/ctlseqs.html有关 xterm 的代码的相当技术性的描述)。

下面是如何设置标题的示例:

set_title() {
  printf '\033]0;%s\007' "$*"
}

答案2

只需将相关的 ANSI 代码输出到 stdout 或 stderr 即可。

以下内容对我有用xterm

for i in {10..1} ; do printf '\e]0;'$i'\a' ; sleep 1 ; done &

某些终端还可能提供 API 来以编程方式更改其标题。

相关内容