プロセスの実行中にターミナル ウィンドウのタイトルを更新できますか?

プロセスの実行中にターミナル ウィンドウのタイトルを更新できますか?

ターミナルで自分用の小さなポモドーロ/カウントダウン タイマーを設定しようとしています。

このコメントSuperuser には、残り時間を STDOUT に表示するカウントダウン タイマーとして機能する便利な小さなシェル関数が用意されていますprintf(すばらしい)。ターミナル エミュレーター タブのタイトルにライブ カウントダウンが表示され、タブを切り替えなくても残り時間を監視できればさらによいと思いました。

現れる環境PROMPT_COMMAND変数を使用してウィンドウタイトルを更新できます、しかしその内容は実行されるのでBashがプロンプトを表示する直前のみただし、プロセスの実行中にタイトルをライブ更新する方法はありません (私の知る限り)。

これを実行する方法はありますか?

(tmux で新しいペインを分割することで、これをより簡単に解決できると思いましたが、画面が小さいので、画面領域をできるだけ節約できればありがたいです。)

答え1

端末コードが必要な場合があります。http://wiki.bash-hackers.org/scripting/terminalcodesそしてhttps://en.wikipedia.org/wiki/ANSI_エスケープコード詳細については(またはhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlxterm に関連するコードの非常に技術的な説明については、こちらを参照してください。

タイトルを設定する方法の例を次に示します。

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 も提供される場合があります。

関連情報