2011-08-04 66 views
27

當我在.bash_rc.bash_profile中進行更改後,當我啓動GNU屏幕時,它不能識別這些更改。 我可以如何讓GNU屏幕讀取.bash_profile/.bash_rc更改?

source ~/.bash_profile 

,它適用於當前的屏幕窗口,我有開放的,但我必須這樣做,對於每一個畫面的窗口,我已經打開。

如何讓屏幕閱讀我在bash配置中的最新更改?

+0

邁克如何將接受的答案更改爲另一個(正確的)答案? – dotz

回答

11

你必須在你打開的每個屏幕上這樣做,因爲它們都是不同的殼。如果每次打開新shell都需要更改,我建議將更改放在〜/ .bashrc中。

顯然,你可以一次使用this syntax命令發送到所有窗口:

C-a : 
at "#" stuff "source ~/.bash_profile^M" 
+0

我能夠爲所有打開的屏幕窗口提供.bash_profile,但它不適用於我打開的任何新窗口窗口。 當我開始新的屏幕會話時,它也不會加載所有新的.bash_profile數據。 –

+4

我不知道我爲什麼要這樣做。 .bash_profile僅在您第一次登錄時纔會生成.bashrc在每次打開shell時完成。如果您每次都需要它,我建議您將更改放入.bashrc而不是.bash_profile。 – gpojd

+0

完美的工作!非常感謝! 我仍然會認爲把東西放入.bash_profile會在我登錄時加載,但事實並非如此。 –

41

如果你想屏幕總是把你的shell作爲登錄shell和源將如果讀取相同的文件剛開始一個新的外殼通常,添加以下~/.screenrc(或者~/.byobu/.screenrc,如在評論中指出):

shell -$SHELL 

這樣,你不需要手動告訴它每次源文件ÿ ou開始一個新的屏幕。儘管如果您只是進行了更改,並希望這些更改反映在當前屏幕中,您將不得不這樣做。

此文檔(以及許多其他屏幕詳細信息)可以找到here。基本上,shell是一個屏幕命令,告訴它在需要創建新shell時運行以下命令。 $SHELL是通常的變量,它保存着您首選shell的路徑。 $SHELL前面的破折號-表示它應該作爲登錄外殼運行(這通常意味着它源自您的~/.bash_profile等)。

但值得指出的是,屏幕默認只是從開始屏幕的shell中繼承大多數環境變量;並且登錄子shell可能會以某種意外的方式更改某些環境變量。我遇到了一種情況,我的$ PATH元素基本上是排列的。我通過超級用戶this particularly excellent answer解決了這個問題。

您可能會注意到source命令可用。需要注意的是,這會產生一個screen命令的文件,而不是shell命令。其他相關(屏幕)命令包括evalexec

+1

在我的情況下,需要編輯的.screenrc位於.byobu/.screenrc中。 RHEL6 –