進程運行時可以更新終端機視窗標題嗎?

進程運行時可以更新終端機視窗標題嗎?

我正在嘗試在終端機中為自己設置一個小番茄/倒數計時器。

這則評論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 以程式設計方式更改其標題。

相關內容