2012-04-25 42 views
15

我有幾個bash腳本,我想確保在默認情況下運行,並且我正在將它們存儲在我的mac上的~/.profile中。這是存儲它們的錯誤地方嗎?我聽說過其他人,並嘗試他們(如~/.bashrc,~/.bash_profile等),但他們似乎並沒有工作。爲什麼我必須繼續使用`source〜/ .profile`來獲取設置?

所有這些和我將哪些腳本放在一起以便在運行時進行配置和我不必每次打開終端時都要撥打$ source ~/.profile有什麼區別?

+0

另請參閱http://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment – Nakilon 2013-08-04 18:54:01

回答

7
     +-----------------+ 
        |     | 
interactive shell -->| ~/.bashrc  | 
        |     | 
        +-----------------+ 

interactive shell會自動源~/.bashrc

看看Should the .bashrc in the home directory load automatically?

+0

我會試試這個。登錄shell和其他登錄shell有什麼區別? – locoboy 2012-04-25 18:10:09

+1

交互式外殼是您在終端內部運行的外殼;也就是說,stdin和stdout都指向終端的文件描述符。您使用的99%的shell將作爲交互式shell運行。 – 2012-04-25 18:12:10

+0

如何確保我正在運行互動而不是另一個?看起來我正在運行另一個。 – locoboy 2012-04-25 18:13:04

2

不同的bash設置會根據配置自動獲取不同的文件。始終採用的幾乎通用的文件是~/.bashrc - 這是一個bash核心內容,它將加載此文件。在那個文件中,你應該添加你的行到source ~/.profile,你會很開心!

CNC中

從我的Linux和我的同事的Mac:

$ echo "echo hello" >> ~/.profile 
$ echo "source ~/.profile" >> ~/.bashrc 
$ bash 
Hello 
$ 
+0

我試過這個,但它仍然不工作 – locoboy 2012-04-25 17:54:43

+0

我仔細檢查瞭解決方案在同事的Mac上發佈。在這一點上,您能否提供有關機器上正在發生的事情的任何見解?如果你可以運行和發佈ls -l〜/ .bashrc,ls -l〜/ .profile,cat〜/ .bashrc,cat〜/ .profile – 2012-04-25 17:59:29

+1

.bashrc只有在shell是交互式的時候纔會被髮送,而不是*登錄貝殼。按照慣例,.bashrc是從'〜/ .bash_login'調用的,但這不一定如此......所以你不能指望被調用的.bashrc。查看@ kev的帖子中的鏈接。 – 2012-04-25 18:02:02

5

我這來糾正該問題:

cat .bash_profile >> .profile 
rm .bash_profile 

另一種方法是:

echo "source ~/.profile" >> .bash_profile 
7

如果同時~/.bash_profile~/.profile存在時,bash只讀取~/.bash_profile當它被作爲交互式登錄shell調用時。

https://www.gnu.org/s/bash/manual/html_node/Bash-Startup-Files.html

援引作爲交互式登錄殼,或用--login

當bash被調用以交互登錄殼,或作爲非交互式殼與--login選項,它首先從文件/etc/profile中讀取並執行命令,如果該文件存在。讀完該文件後,它會按順序查找~/.bash_profile,~/.bash_login~/.profile,並讀取並執行第一個存在且可讀的命令。

[...]

作爲交互非登錄殼

當交互式殼不是登錄shell啓動時,bash讀取並從~/.bashrc執行命令如果文件已存在。

~/.profile也被其他殼使用。

總站的iTerm在默認情況下打開新的彈作爲登錄shell(通過執行類似login -pf $USER),但許多GNU/Linux的終端應用程序中打開新的彈非登錄shell。 OS X用戶通常使用~/.bash_profile而不是~/.bashrc

2

確保如果你source ~/.profile.bashrc你註釋掉或刪除任何命令(在.profile)打電話或源在.profile.bashrc,否則將永遠循環下去,你將永遠不會得到提示。

相關問題