
複数のサーバーに同時に接続する分散システムを開発中です。作業中のプログラムには手動で開始される項目はありませんが、エラーを手動で再現する方法は次のとおりです。
xtermを起動し、次のようにマシンにSSHを接続します。
ssh machine_1
次のように、最初のxterm内で別のxtermを起動します。
xterm &
その後、新しいxtermウィンドウには、「ユーザー名(machine_1)」に似たタイトルバーがあります。
このxtermでは、次のように他のシステムにSSHで接続します。
ssh machine_2
ただし、タイトルバーはまだ次のとおりです。「ユーザー名(machine_1)」
machine_2にログインしても同じです。 「ユーザー名(machine_2)」を表示したいです。括弧を完全に削除しても機能します。
xtermsetを試しましたが、角かっこには影響しません。
答え1
xterm または machine_1 のシェルは、コンピュータ名を含むように端末のタイトルを設定するように設定されます。 machine_2でシェルを設定し、コンピュータ名を含めるように端末のタイトルを設定します。また、SSHセッションが終了したら、machine_1のシェルがヘッダーをリセットしていることを確認する必要があります。一般的なアプローチは、プロンプトが表示されたときにシェルに端末のタイトルをリセットさせることです。フルスクリーンテキストモードアプリケーションが実行時に端末のタイトルを設定する場合、端末のタイトルを合理的なものにリセットする追加の利点があります。
以下を表示してxtermのタイトルを設定できます。エスケープシーケンス \e]2;my title here\a
ここでは\e
、エスケープ文字(\033
)、および\a
ベル文字(\007
)です。シェルプロンプトにこの順序を含めます。 ~のため強く打つ、次の行を追加してください~/.bashrc
。
PS1="\[\033]2;xterm on $HOSTNAME\a\]$PS1";;
バックスラッシュ括弧句読点は、\[…\]
bashに内部コンテンツの幅がゼロであることを知らせます(括弧を省略するとマークが破れます)。
このオプションを設定すると、プロンプト文字列に変数とコマンドの置換を含めることで、各コマンドの後に変更されるよりクールなタイトルを取得できますpromptvars
。
zsh でタイトルを設定します。precmd
機能、各プロンプトの前に実行されます。
precmd () {
print -n "\e]2;xterm on $HOSTNAME in $PWD\a"
}
これにより、preexec
実行中のコマンドの名前を含めるようにタイトルを設定できます。以下は、コマンドで印刷できない文字にうまく反応しない簡単なアプローチです。
preexec () {
print -nr $'\e]2;'"xterm on $HOSTNAME running $2"$'\a'
}