2013-03-05 32 views
4

我想重置shell,當我註銷/登錄,重新加載別名,函數,從頭開始。重置/重新加載bash,完全(別名和函數)

但是不要談論source ~/.bashrc也不. ~/.bashrc

爲什麼?由於source.只是使用新函數,別名等豐富當前shell。


僅供參考,你可以把這個功能在你的.bashrc:

function foo { 
    echo "foo"; 
} 

然後做source ~/.bashrc. ~/.bashrc。是的,foo正在工作。那麼現在,edityour .bashrc,並通過酒吧更換,有:

function bar { 
    echo "bar"; 
} 

您現在可以Foo類型,只見該函數foo仍在工作,儘管它不存在於.bashrc文件中。這就是我想表達的觀點。


我tryed exec bash;,但它doesn'nt加載.bashrc文件。而exec bash;source ~/.bashrc;顯然不起作用,因爲exec殺死當前進程(source永遠不會被調用)。

+3

你有沒有試過bash --login? – BigMike 2013-03-05 11:14:20

+0

+1 @BigMike這會創建一個bash的新實例,就像您剛剛登錄一樣。是您想要的嗎? – 2013-03-05 13:14:14

+0

該死的,你很好。請在@BigMike的甜蜜回答中寫下'bash --login',我可以選擇你! – 2013-03-05 13:48:22

回答

7

爲OP希望

bash --login 

注意:如果你正在運行一個終端(xterm或相似)中使用bash,你也需要提供-ls參數(或同等學歷)到終端。 (例如xterm -ls

+1

只要一件事,每次下一次登錄都會運行另一個bash進程,而舊的進程仍在運行。否則很好。 – 2013-03-05 13:50:52

+0

是的,因爲你實際上正在開始一個新的bash過程。然而,你可以殺死舊的並分離,但通常這涉及到一些shell技巧。 – BigMike 2013-03-05 13:52:24

+3

所以'exec bash --login'會殺死當前的bash,並開始一個新的,對嗎?爲了避免@Michal Trybus的通知。 – 2013-03-05 13:55:59

1

寫下面的腳本:

while true; do 
    bash 
    if [ $? -ne 123 ]; then 
     break 
    fi 
done 

設置可執行位,並將其設置爲你的shell。 然後在你的~/.bashrc添加一個別名:

alias resetterm="exit 123" 

這需要運行所有的時間只是一個額外的bash進程。每次你重置,一個新的bash將運行,舊的過程將結束。

+0

這是一個很好的!在某些系統上/有一些shell我認爲你不能保證初始化腳本將被執行。 – BigMike 2013-03-05 14:31:51