tmux ウィンドウ名に bash $PS1 を使用するようにする

tmux ウィンドウ名に bash $PS1 を使用するようにする

Windows では、tmuxMobaXterm を介して CentOS 7 上の 1.8 に接続します。

理想的には、tmuxウィンドウに、アクティブなペインで最後に入力したコマンドの名前を表示したいです(印刷のようにでcd /homeはなく)。どうすればいいのかわかりません。代わりに、アクティブなペインの名前と一致するようにする方法を見つけようとしています。試してみました。bash{pane_current_command}PS1この回答の提案私のbashrcにこれを追加します:

settitle() {
    printf "\033k$1\033\\"
}
basic_prompt='${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}'
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi; settitle($basic_prompt)'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '

そして

bash: PROMPT_COMMAND: line 10: syntax error near unexpected token '$basic_prompt'

  1. 最後に完了したコマンドで tmux ウィンドウに名前を付ける方法はありますか?

  2. PS1そうでない場合、ユーザー名とパスに基づいて動的に に正しく設定するにはどうすればよいでしょうか?

答え1

tmux 2.6 および tmux 1.8 で解決しました (両方でテスト済み)。

tmux動的なウィンドウ タイトルを表示するには、~/.bashrc次のように編集します。

settitle() {
    printf "\033k$1\033\\"
}
dynamic_window_title='${USER:0:3}@${PWD:${#PWD}<25?0:(-25)}'
PROMPT_COMMAND='if [ "$TERM" =~ "screen" ]; then eval prompt=$dynamic_window_title; settitle "$prompt"; fi;'

そして、おそらく次のものが必要~/.tmux.confになります:

setw -g automatic-rename on

私の理解では、settitle()基本的には、コマンドを実行するたびにウィンドウの名前を変更します。これがどのように行われるのか、完全には理解していません。

PROMPT_COMMANDはbashの一部で、コマンドを実行するたびに実行されます。これにより、次のようなクールなことが可能になります。連続して入力した正しい bash コマンドの数を記録する、ここでのタイトルの継続的な再定義の使用に加えて。

$TERMは環境変数であり、私の場合、tmux の場合は「screen」(または「screen-256color」など) に設定され、MobaXterm を使用する場合は「xterm」に設定されます。これをチェックするのは、そうしない$PS1と tmux 以外では基本的に二重に印刷されるためです。

dynamic_title一重引用符で囲む必要があります。そうしないと、 をソースするときに定義され、~/.bashrc動的ではなくなります。ただし、ある時点で定義する必要があります。そうしないと、ウィンドウの名前が文字通り に変更されます。${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}これはeval、ウィンドウのタイトルにしたい文字列を文字通り作成するものです。次に、その文字列を に渡しsettitle()、スペースが正しく機能するように二重引用符で囲みます。

関連情報