为什么我必须不停地使用`source ~/.profile`才能使设置生效?

28

我有几个bash脚本,我希望默认情况下运行它们,目前我将它们存储在我的mac的~/.profile中。这是存储它们的错误位置吗?我听说过其他位置并尝试过它们(如~/.bashrc~/.bash_profile等),但它们似乎没有起作用。

所有这些位置之间有什么区别,我应该将脚本放在哪个位置以便在运行时进行配置,而不必每次打开终端时都调用$ source ~/.profile


请参见https://dev59.com/PHRC5IYBdhLWcg3wFNDX。 - Nakilon
5个回答

18
如果同时存在~/.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

9

我会尝试这个。登录 shell 和其他 shell 有什么区别? - locoboy
1
交互式 shell 是在终端中运行的 shell;也就是说,标准输入和标准输出都指向终端的文件描述符。你工作中使用的 99% 的 shell 都将作为交互式 shell 运行。 - David Souther
我该如何确保自己正在运行交互式而非其他模式?看起来好像我正在运行其他模式。 - locoboy
1
@locoboy。请手动将 source ~/.bashrc 追加到 ~/.bashrc_profile 文件中。 - kev
10
我不确定ASCII框图是否有帮助。 - Keith Thompson

9
我采取了以下措施来解决这个问题:
cat .bash_profile >> .profile
rm .bash_profile

替代方案是:

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

6

如果你在 .bashrc 文件中执行了 source ~/.profile 命令,那么请确保在 .profile 中注释或删除任何调用或来源于 .bashrc 的命令,否则会导致无限循环,无法获得提示符。


3
不同的bash设置会根据其配置自动加载不同的文件。几乎所有情况下都会加载的文件是“~/.bashrc”-这是bash的核心功能。在该文件中,您应该添加以下行:source ~/.profile,然后就可以使用了!

-编辑-

来自我的Linux和同事的Mac:

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

我在同事的 Mac 上双重检查了解决方案,然后发布了。此时,您能否提供有关您的计算机上正在发生的情况的任何见解?如果您可以运行并发布 ls -l ~/.bashrc、ls -l ~/.profile、cat ~/.bashrc 和 cat ~/.profile。 - David Souther
1
只有当shell是交互式且不是登录shell时,才会调用.bashrc。按照惯例,.bashrc从~/.bash_login中调用,但这并非一定如此...所以你不能指望.bashrc被调用。请参见@kev帖子中的链接。 - Barton Chittenden
我想我仍需要更多的澄清- 从问题中的印象是@locoboy正在osx终端中运行这个命令,这意味着他确实在使用交互式Shell。 - David Souther
或者,他应该将所有的脚本从/.profile移动到/.bashrc。我曾考虑过发布这个答案,但认为这样更合理。 - David Souther
@BartonChittenden 非常有可能-在这种情况下,在我们对答案进行投票之前,我们需要更多关于问题的信息。 - David Souther
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接