web-dev-qa-db-ja.com

コマンド入力に基づいて動的ウィンドウのタイトルを設定する

コマンド入力に基づいてurxvtウィンドウのタイトルを動的に設定する方法を探しています。

例を見てみましょう。

Urxvtウィンドウでmplayer http://66.197.229.245:8082を実行する場合、このウィンドウのタイトルをmplayer http://66.197.229.245:8082またはさらに良いTerminal | mplayerに設定してください。

または、journalctl -bを実行する場合、ウィンドウタイトルをTerminal | journalctl -b以上に設定したい場合は、Terminal | journalctlを使用します。

これは可能ですか?

28
orschiro

シェルとしてBashを使用していると仮定すると、この変数を設定できます。

Prompt_COMMAND='echo -ne "\033]0;Terminal | mplayer\007"'

ss #1

ss #2

ss #3

タイトルに前のコマンドを含めますか?

より精巧なタイトルバーが必要な場合は、このメソッドを使用して、現在実行中のコマンドをタイトルバーに動的に設定できます。

 $ trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG

ss #4

ss #5

あなたが探しているもの

たとえば、必要なものを取得するには、実行可能ファイルの名前だけを解析するなどの作業を行う必要があります。したがって、コマンドのどの部分が必要かについて、いくつかの決定を行う必要があります。 .. | awk '{print $1}'を使用して、コマンドのみの名前を取得できます。

永久に

/etc/bashrcまたは$HOME/.bashrcファイルを使用してこれをデフォルトの動作にしたい場合は、おそらく @ simon's このSOの提案に従う必要がありますタイトル付きQ&A: Bash-2番目のコマンドを実行して端末のタイトルを更新する

サイモンの答えは次のとおりです。

function settitle () {
    export PREV_COMMAND=${PREV_COMMAND}${@}
    echo -ne "\033]0;${PREV_COMMAND}\007"
    export PREV_COMMAND=${PREV_COMMAND}' | '
}

export Prompt_COMMAND=${Prompt_COMMAND}';export PREV_COMMAND=""'

trap 'settitle "$BASH_COMMAND"' DEBUG

出力のリダイレクト

このSOで参照されているQ&Aのタイトル: {デバッグfooでデバッグトラップが実行される(コンテンツがリダイレクトされる)のはなぜですか。エコーバー; }> file? 出力をSTDERRまたはさらに良い/dev/ttyにリダイレクトすることを推奨する@Charles Duffyによる回答があります。彼の答えは、これらの方法の両方で良い指針を持っています。

参考文献

32
slm