
Windows では、tmux
MobaXterm を介して 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'
最後に完了したコマンドで tmux ウィンドウに名前を付ける方法はありますか?
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()
、スペースが正しく機能するように二重引用符で囲みます。