
現在、私はターミナルバーのタイトルを変更するために1行のPerlコードを使用しています。
print("\e]0;@ARGV\7");
しかし、別のリモート マシンに ssh するたびに、タイトルがホストによって変更されます (特に気になりません)。しかし、接続を終了した後、変更されたタイトルが残ります。これを修正する方法はありますか? 基本的に、ローカルで操作するときに、端末に固定のタイトルが必要です。
私は主に CentOS または Debian で xfce ターミナルとターミネーターを使用しています。ありがとうございます。
編集
もう 1 つの微妙な点は、すべての端末に同じ名前を付けるのではなく、タイトルをその場で自由に編集できるようにし、SSH セッションで編集内容を変更することを禁止するだけにしたいということです。
答え1
解決策: 何かを行うために~/.bashrcにいくつかの関数を追加する後ssh および su コマンド
function title()
{
# change the title of the current window or tab
echo -ne "\033]0;$*\007"
}
function ssh()
{
/usr/bin/ssh "$@"
# revert the window title after the ssh command
title $USER@$HOST
}
function su()
{
/bin/su "$@"
# revert the window title after the su command
title $USER@$HOST
}
注意: ~/.bashrc を編集した後は bash を再起動してください。
例:
# title is "user1@boxA"
ssh boxB # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()
お役に立てれば幸いです。
答え2
ウィンドウ タイトルについてはわかりませんが、SSH セッションを終了するときに、つまり実際には SSH セッションを終了した後に、システムに何かを実行させようとしています。簡単に言うと、そのようには動作しません。基本的に、3 つの選択肢があります。
ssh のラッパー、つまり、$PATH の途中に という行が含まれる、
ssh
という実行可能なシェル スクリプトを記述します。これにより、オーバーヘッドを最小限に抑えながら、有効な ssh バイナリが実行される前と後にシェルでいくつかの処理を実行できるようになります。/usr/bin/ssh
exec /usr/bin/ssh $@
選択した SSH ソースに対してパッチを記述して、コマンドラインまたは何らかの構成設定を介して渡されたシェル コマンドを実行するクリーンアップ フックを提供します。これが私たちが求めているものです。
PROMPT_COMMAND
の出力を評価します。history
基本的には、1 に対するより一般的で醜いアプローチです。
答え3
同じメカニズムを使用して、ローカル シェルのドットファイル ( など) を構成して、$PROMPT_COMMAND
ターミナル~/.bashrc
タイトルを適切に設定します。
例えば:
export PROMPT_COMMAND="printf '\e]0;bash\7\n'"
答え4
他の回答は、SSH を終了するときには機能しませんでしたが、近いところまではできました。setw automatic-rename を追加すると、リモート SSH セッションを終了するときに機能し、自動的に名前が変更され、リセットするためにウィンドウを終了する必要がなくなります。[2018 年 1 月 - Debian 9]
ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}