Bash
~/.bashrc 腳本在 ssh 登錄時無法正常執行,但可以與源 ~/.bashrc 一起正常工作
為了跟踪我在不同選項卡中打開的 ssh 連接,我使用以下 ~/.bashrc 腳本:
function set-title() { if [[ -z "$ORIG" ]]; then ORIG=$PS1 fi TITLE="\[\e]2;$@\a\]" PS1=${ORIG}${TITLE} } set-title <SERVERNAME>; echo "set-title <SERVERNAME>"
我為我沒有打開 ssh 的選項卡(使用
set-title LOCAL;
)和兩個不同的伺服器上執行此操作。在一台伺服器上,它完全符合我的要求並更改了選項卡名稱,但在另一台伺服器上它沒有更改。當我
set-title <SERVERNAME>;
自己在命令行上鍵入時,它確實會更改選項卡名稱,並且在登錄時會 echo"set-title <SERVERNAME>"
。另外,如果我這樣做source ~/.bashrc
,它會按預期工作,所以只有在登錄到伺服器時它才會不起作用。在它工作的伺服器上登錄執行
Scientific Linux release 6.7 (Carbon)
,在它不工作的伺服器上執行CentOS release 6.6 (Final)
。什麼可能導致set-title <SERVERNAME>;
.bashrc 腳本在登錄時無法正確執行?
沒有更多資訊,無法回答這個問題。
但是,我想最有可能的情況是
.bashrc
登錄時由.bash_profile
或來源.profile
- 可能類似於以下內容:# source the users bashrc if it exists if [ -f "${HOME}/.bashrc" ] ; then source "${HOME}/.bashrc" fi
我猜想在沒有設置標題的系統上,該
PS
變數在登錄腳本的稍後階段被設置為另一個值。該
PS1
變數實際上應該在僅在登錄時執行的 Bash 配置文件(.bash_profile
或.profile
)中設置,並且該變數應exported
作為環境變數編輯,以便其值被任何子 shell 繼承。PS1=${ORIG}${TITLE} export PS1
或使用適用於 Bash shell 的簡寫:
export PS1=${ORIG}${TITLE}