http://www.haw-haw.org/node/482問(wèn)題提出:
作為系統管理員
經(jīng)常需要在模擬終端上遠程登上服務(wù)器做各種操作
而且很多時(shí)候需要同時(shí)用不同的窗口登上不同的服務(wù)器
當登上服務(wù)器太多的時(shí)候
就偶然會(huì )發(fā)現突然不知道哪個(gè)窗口登的是哪臺服務(wù)器了
這可是個(gè)大問(wèn)題
如果在錯誤的服務(wù)器里執行了特定命令
有時(shí)候后果是非常嚴重的
因而就想能否有種辦法能讓人一目了然的分辨出哪個(gè)窗口登陸的是哪臺機器
因為我們分辨機器大多是靠ip地址
就想能否在窗口的標題部分顯示機器的ip就最好了
技術(shù)實(shí)現:
bash支持環(huán)境變量PROMPT_COMMAND
將其設置為一個(gè)命令行字符串或者是包含命令行字符串的一個(gè)文件的文件名
命令行用來(lái)在顯示prompt之前執行
而xterm又支持3種escape序列
可以用來(lái)更改xterm的“icon name”和”title”兩者之其一或兩者都改
還有
在redhat系列的機器上(redhat、fedora)
都支持文件/etc/sysconfig/bash-prompt-xterm來(lái)保存bash+xterm下的PROMPT_COMMAND環(huán)境變量的內容
結合這幾點(diǎn)
我們就可以輕松實(shí)現“在窗口標題部分顯示已登陸服務(wù)器的ip地址”這個(gè)功能
我當前用的是
echo -ne “\e]2;$(ifconfig | awk ‘/inet addr:/ && ! /inet addr:127\./ { sub (”addr:”, “”); print $2 }’ | sed -e :a -e ‘$!N;s/\n/\|/g;ta’):${PWD}\a”
這里的”\e]2″是xterm支持的第三種escape序列,用來(lái)設置窗口的標題
“$(.*)”的內容是shell命令,用來(lái)取出服務(wù)器的當前ip地址(除去127.x.x.x)列表,并用”|”連接起來(lái)
“${PWD}”是指當前的工作目錄
“\a”是xterm支持的escape序列的結束符
引申一下:
后來(lái)發(fā)現,所謂”xterm支持的3種escape序列”,基本上其他的term都支持
起碼secure CRT里所帶的term類(lèi)型都支持(我測過(guò))
而且redhat系列的服務(wù)器(redhat, fedora)除了支持/etc/sysconfig/bash-prompt-xterm外
還支持/etc/sysconfig/bash-prompt-screen、/etc/sysconfig/bash-prompt-default
用來(lái)存儲當term類(lèi)型是screen時(shí)和term類(lèi)型不是xterm和screen時(shí)的PROMPT_COMMAND環(huán)境變量的值
于是乎
cp /etc/sysconfig/bash-prompt-xterm /etc/sysconfig/bash-prompt-default
cp /etc/sysconfig/bash-prompt-xterm /etc/sysconfig/bash-prompt-screen
這樣的話(huà)
不管secure crt里term設成什么
都能在其標題里顯示服務(wù)器ip
補充一下:
為什么這里還有個(gè)term被設成screen的case呢
那是因為我們常用的命令screen
執行的時(shí)候會(huì )將環(huán)境變量PROMPT_COMMAND設成”screen”