回答:
私はあなたをPS1
直接見る方法を知りません。
ただし、tmux
ウィンドウ名を設定するのと同じコマンドを理解してscreen
います。
~/.bashrc
orでこのような関数を定義できます~/.zshrc
:
settitle() {
printf "\033k$1\033\\"
}
その後settitle
、どこからでも呼び出します。
たとえば、PS1
変数に含めることができます。たとえば
PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '
または経由PROMPT_COMMAND
:
PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1
これtmux
で、デスクトップでssh
実行していること、およびコマンドではなくホスト名を使用したいことがssh
わかりました。これははるかに簡単です。
settitle
local ~/.bashrc
に追加したら、これも追加するだけです。
ssh() {
settitle "$*"
command ssh "$@"
settitle "bash"
}
bashをzsh、または必要に応じてより適切なものに置き換えます。
PROMPT_COMMAND='settitle $HOSTNAME:$PWD'
-@Mikelのコードでは、-bash: : No such file or directory
各コマンドプロンプトの前にホスト名とエラーが表示されませんでした。私は、$()
bash settitle
が返すものを実行しようとするように思えます。(Linuxでbashを実行しています。)
tmux rename-window -t${TMUX_PANE} "Title Text"
これは、ウィンドウにtmuxタイトルを設定する適切な方法です。$ TMUX_PANE変数はtmuxによって設定され、異なるペインを区別するために使用されます。
-t${TMUX_PANE}
必要だとは思いません(少なくとも私にとってはそうではありませんでした)。
sleep 3
ウィンドウを切り替えている場合、スリープが完了すると、プロンプトは間違ったウィンドウにコマンドを発行します。(これが私がここに来た理由です、+ 1)。
tmuxセッションのタイトルを変更する方法を探してここに来た人だけのために:
Ctrl+ B、$
これにより、アクティブなセッションの名前を変更できるプロンプトが表示されます。
アクティブウィンドウを変更するには、代わりにkommaを使用します。
Ctrl+ B、,
Mikelの回答とUtahJarheadの回答の両方を組み合わせて、.zshrc
この問題を解決するために以下を使用しました。
ssh() {
tmux rename-window "$*"
command ssh "$@"
exit
}
デフォルトで自動ウィンドウ名の変更が有効になっていますが、リモートホストを終了した後に再び有効にする方法が見つかりません。したがって、ウィンドウを完全に終了するだけで、ワークフローの問題ではありません。名前を「bash」などに変更する場合は、exit
行をに置き換えますtmux rename-window "bash"
。
hostname -s
コマンドssh "@ $"の後にtmux rename-windowを使用しています。これは基本的にタイトルを私の "ゲートウェイ"マシンに "リセット"します。
代わりに、exit
またはtmux rename-window "bash"
使用できます
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
tmux rename-window "$*"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}
これにより、次のコマンドのウィンドウの名前を自動的に変更する通常の機能が再びアクティブになります。
if
名前の変更(それなし)からブロック防止tmux
から現在のウィンドウをssh
他のシェル(外に使用されるコマンドtmux
)。
if env | grep -q "TMUX_PANE"; then
代わりに行きましたps -p...
が、同じ原理です。
私はこれがかなり前に回答されたことを知っていますが、(受け入れられた回答に基づいて)私がいじって見つけたものを追加すると思いました..これをすべてのサーバーの/ etc / bashrcに追加しました(簡単に布、人形などで行います)
settitle() {
printf "\033k$1\033\\"
}
bash_prompt_command() {
settitle "`hostname -s`:$PWD"
}
PROMPT_COMMAND=bash_prompt_command
また、画面またはtmuxでウィンドウ名を自動的に設定します。
hostname -s
ので、余分なドメインのものを取り除くことまでちょうどサーバー1としてserver1.internal.localショー
別の解決策は、sshセッションの後に、アクティブウィンドウの名前を以前の名前に変更することです。
ssh() {
local code=0
local ancien
ancien=$(tmux display-message -p '#W')
if [ $TERM = tmux -o $TERM = tmux-256color ]; then
tmux rename-window "$*"
command ssh "$@"
code=$?
else
command ssh "$@"
code=$?
fi
tmux rename-window $ancien
return $code
}
これは、tmux 2.1
ローカルおよびサーバー上のzsh 内およびzshで機能します。
ssh() {
tmux set-option allow-rename off 1>/dev/null
tmux rename-window "ssh/$*"
command ssh "$@"
tmux set-option allow-rename on 1>/dev/null
}
Windowsの名前を変更する前にallow-renameオプションを手動で無効にする必要がありました-そうしないと、ほとんどのサーバーで現在のパスに変更されました(zshも使用)。良いことは、allow-renameオプションを再度有効にすると、すぐに機能することです。
これを追加する.profile
か.bashrc
# Change window name for `tmux`
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
#tmux rename-window "$(echo $* | cut -d . -f 1)"
tmux rename-window "$(echo $* | cut -d @ -f 2)"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}