GNOME端末-タブのタイトルにプロセス名


9

現在実行中のプロセス名をGNOMEターミナルのタブタイトル(またはタブが1つしかない場合はタイトルバー)に挿入するにはどうすればよいですか?

-更新-

明確にするために、プロセスを実行するときにタブのタイトルを更新したいとします。たとえば、次のようにします。

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"

回答:


8

それを見つけた。このサイトは、ソリューションの適切な説明を提供します。
あなたのbashrcでは、それは次のようになります:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

個人的には、自分のbashrcに追加するつもりはありません。なぜなら、DEBUGとトレースを組み合わせると、すべてのシェルが起動したときに大量のゴミが捨てられるからです。あなたがそれに耐えることができれば、それは実際に働きます。ただし、最初の単語だけではなく、コマンド全体が表示されます。


2
良い質問をしていただきありがとうございます。これは最初は簡単な質問のように見えました...最初の10分後、それは私を狂わせ始めていました!だから私はそれを良い質問だと思った-簡単に聞こえるが、私はシェル、ターミナル、シグナル間の相互作用についてもっと深く学ぶことを強いられた。
DaveParillo 2009

なぜ- PS1割り当てですか?それは私にとって不愉快な結果をもたらし、それは本当にここでは必要ないようです...?
phil294 2017

私にとってはエラーです。
クズカイ

4

さて、だれもがすでにDavid Pashleyの解決策を知っているように思えるので、私はこの解決策がほとんど同じであるので、この解決策を見つけるのにとても長い時間がかかったのにはちょっと驚いた。

このソリューションは、実際にはbash補完スパムのゴミを処理します。

明確にするために、私はここでは自分で何もしませんでした。すべてのクレジットはMarius Gedminasに送られます。

これは、Gnome-Terminal / Terminatorで完璧に機能します

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

また、これについて知り、共有したかったので、これもクロスポストです。ここでも役に立ちます。


2

以下が動作するはずです。.bash_functionsファイルに関数があり、.bashrc設定する前にファイルに読み込みます$PROMPT_COMMAND

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

1
あなたは近くにいますが、私はそれほど良くはありません。これにより、最後に実行されたコマンドが表示されますが、実際にはどのような不穏が生じているかはわかりません。term_titleを次のように変更することを考えました: `if [jobs]; その後、歴史1 | awk '{print $ 2}'; else echo -ne 'bash em' fi`は機能しますが、有効期間が短いプロセスをキャッチすることに一貫性がなく、プロセスが終了しても元に戻りません。これらのトリガー/イベントをいじる方法を知るためのxtermの内部構造については知りません。
DaveParillo 2009

bashはプロンプトを表示する直前に$ PROMPT_COMMANDを実行するため、これがこのアプローチで実行できる最善の方法です。Enterを押した直後に実行できる他のトリガーがあるかもしれませんが、私はそれらを知りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.