
現在我正在使用一行 Perl 程式碼來更改終端機列的標題,
print("\e]0;@ARGV\7");
但每次我 ssh 到另一台遠端電腦後,標題都會被主機修改(我對此並不特別擔心)。但退出連線後,修改後的標題仍然存在。有沒有辦法解決這個問題?本質上,我希望在本地操作時為我的終端機有一個固定的標題。
我主要在 CentOS 或 Debian 下使用 xfce 終端和終結器。謝謝。
編輯
另一個微妙之處是,與其讓所有終端具有相同的名稱,我更希望能夠自由地即時編輯它們的標題,但僅禁止 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 會話之後。簡而言之:它不是那樣運作的。基本上你有三個選擇:
圍繞 ssh 編寫一個包裝器,即一個名為的可執行 shell 腳本,
ssh
該腳本優先於您的 $PATH,其中包含中間某處的/usr/bin/ssh
行。exec /usr/bin/ssh $@
這使您能夠讓 shell 在有效的 ssh 二進位檔案運行之前和之後執行一些操作,同時將開銷保持在最低限度。為您選擇的 SSH 來源編寫補丁,為您提供一個清理鉤子,該鉤子執行透過命令列或某些配置設定傳遞的 shell 命令。這就是我們想要的。
評估
PROMPT_COMMAND
的輸出history
。基本上是一種更通用、更醜陋的方法 1。
答案3
使用相同的機製配置本機 shell 點檔案(例如,$PROMPT_COMMAND
在 中)以適當地設定終端標題。~/.bashrc
例如:
export PROMPT_COMMAND="printf '\e]0;bash\7\n'"
答案4
當我退出 SSH 時,其他答案對我不起作用,但讓我接近。當我退出遠端 ssh 會話時,添加 setw 自動重命名會起作用,因此它會自動重命名,並且不必再退出視窗來重置。 [一月。 2018 - Debian 9]
ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}