2014-05-20 39 views
5

我想修改我的Bash提示符到我的意志;這是多麼$PS1着眼於時刻(與編輯出來的清晰度顏色):如果遠程運行,只能在bash提示符下列出主機?

PS1='\[email protected]\h:\w\$ ' 

導致:

[email protected]:~$ 

我可以調整的提示,以便它隱藏了@tablet-2710p-ubuntu位(由@\h代表)如果我在本地運行當前Bash會話,而不是訪問遠程服務器?

爲了便於攜帶,我寧願不對其進行硬編碼(例如,僅替換tablet-2710p-ubuntu),以防萬一主機名稍後改變。

+2

查看關於如何檢測會話是本地還是通過ssh的問題:http://unix.stackexchange.com/questions/9605/how-can-i-detect-if-the-shell-is-從ssh – dogbane

回答

4

正如How can I detect if the shell is controlled from SSH?提出來的,如果任一$SSH_CLIENT$SSH_TTY設置的變量,這意味着你通過SSH連接。

如果你是一個基於Debian的系統(如Ubuntu),您可以編輯您.bashrc到這樣的事情,以達到預期的效果(注意,字符串PS1設置爲has to be defined with double quotes,而不是單引號作爲它是默認情況下):

if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then 
    if [ "$color_prompt" = yes ]; then 
     host="@\[\033[1;34m\]\h\[\033[00m\]" 
    else 
     host="@\h" 
    fi 
fi 

if [ "$color_prompt" = yes ]; then 
    PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]${host}:\[\033[01;34m\]\w\[\033[00m\]\$ " 
else 
    PS1="${debian_chroot:+($debian_chroot)}\u${host}:\w\$ " 
fi 
unset host 
unset color_prompt force_color_prompt 

導致以下:

BASH: Hide host when running locally, show host when connecting over SSH

旁註:這些更改應在通過SSH連接的服務器上進行.bashrc(或.profile,取決於分發)。將它們設置在您自己的本地Bash配置文件中對連接到其他遠程服務器時顯示的內容沒有影響。

3

你想要下面的東西嗎? :

if [ "$SSH_CONNECTION" ]; then 
    PS1='\[email protected]\h:\w\$ ' 
else 
    PS1='\u:\w\$ ' 
fi 
+0

+1這工作得很好,但我添加了一個更詳細的第二個答案。 – IQAndreas

相關問題