我有几个bash脚本,我希望默认情况下运行它们,目前我将它们存储在我的mac的~/.profile
中。这是存储它们的错误位置吗?我听说过其他位置并尝试过它们(如~/.bashrc
,~/.bash_profile
等),但它们似乎没有起作用。
所有这些位置之间有什么区别,我应该将脚本放在哪个位置以便在运行时进行配置,而不必每次打开终端时都调用$ source ~/.profile
?
我有几个bash脚本,我希望默认情况下运行它们,目前我将它们存储在我的mac的~/.profile
中。这是存储它们的错误位置吗?我听说过其他位置并尝试过它们(如~/.bashrc
,~/.bash_profile
等),但它们似乎没有起作用。
所有这些位置之间有什么区别,我应该将脚本放在哪个位置以便在运行时进行配置,而不必每次打开终端时都调用$ source ~/.profile
?
~/.bash_profile
和~/.profile
文件,当bash作为交互式登录shell被调用时,它只会读取~/.bash_profile
。根据Bash启动文件,如果使用--login
选项调用bash作为交互式登录shell或非交互式shell,则首先从/etc/profile
文件中读取并执行命令(如果该文件存在)。在读取该文件后,按顺序查找~/.bash_profile
、~/.bash_login
和~/.profile
,并从第一个存在且可读的文件中读取并执行命令。当启动交互式但不登录的shell时,bash将从~/.bashrc
读取并执行命令(如果该文件存在)。另外,其他Shell也会使用~/.profile
文件。默认情况下,终端和iTerm打开新的shell时作为登录shell启动(通过执行类似于login -pf $USER
的内容),但许多GNU/Linux终端应用程序将新的shell作为非登录shell启动。OS X用户通常使用~/.bash_profile
代替~/.bashrc
。 +-----------------+
| |
interactive shell -->| ~/.bashrc |
| |
+-----------------+
交互式 shell
会自动源化 ~/.bashrc
。
source ~/.bashrc
追加到 ~/.bashrc_profile
文件中。 - kevcat .bash_profile >> .profile
rm .bash_profile
替代方案是:
echo "source ~/.profile" >> .bash_profile
如果你在 .bashrc
文件中执行了 source ~/.profile
命令,那么请确保在 .profile
中注释或删除任何调用或来源于 .bashrc
的命令,否则会导致无限循环,无法获得提示符。
source ~/.profile
,然后就可以使用了!
-编辑-
来自我的Linux和同事的Mac:
$ echo "echo hello" >> ~/.profile
$ echo "source ~/.profile" >> ~/.bashrc
$ bash
Hello
$
~/.bash_login
中调用,但这并非一定如此...所以你不能指望.bashrc被调用。请参见@kev帖子中的链接。 - Barton Chittenden