为什么我必须继续使用`source~/.profile`来获取设置?

loc*_*boy 20 macos bash terminal

我有几个bash脚本,我想确保默认运行,我现在将它们存储在~/.profile我的mac上.这是存放它们的错误地方吗?我听说过别人,并试图他们(如~/.bashrc,~/.bash_profile等),但他们似乎并不奏效.

所有这些之间的区别是什么,我将脚本放在哪个以便它在运行时配置,而且$ source ~/.profile每次打开终端时都不需要调用?

Lri*_*Lri 12

如果同时~/.bash_profile~/.profile存在时,bash只读取~/.bash_profile,当它被作为交互登录shell.

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

作为交互式登录shell调用,或使用--login调用

当Bash作为交互式登录shell或具有该--login选项的非交互式shell调用时,它首先从该文件读取并执行命令/etc/profile(如果该文件存在).读取文件后,它会寻找~/.bash_profile,~/.bash_login~/.profile,按照这个顺序读取并执行从存在并且可读的第一个命令.

[...]

作为交互式非登录shell调用

当启动不是登录shell的交互式shell时~/.bashrc,如果该文件存在,Bash将从中读取并执行命令.

~/.profile 也被其他shell使用.

终端和iTerm默认打开新shell作为登录shell(通过执行类似的操作login -pf $USER),但许多GNU/Linux终端应用程序打开新shell作为非登录shell.OS X用户经常使用~/.bash_profile而不是~/.bashrc.


kev*_*kev 8

                     +-----------------+
                     |                 |
interactive shell -->|  ~/.bashrc      |
                     |                 |
                     +-----------------+
Run Code Online (Sandbox Code Playgroud)

interactive shell~/.bashrc自动采购.

看看主目录中的.bashrc应该自动加载吗?

  • 我不确定ASCII框和箭头图是否有用. (6认同)

小智 7

我这样做是为了纠正这个问题:

cat .bash_profile >> .profile
rm .bash_profile
Run Code Online (Sandbox Code Playgroud)

替代方案是:

echo "source ~/.profile" >> .bash_profile
Run Code Online (Sandbox Code Playgroud)


小智 5

确保您source ~/.profile在您的代码.bashrc中注释掉或删除任何命令(in .profile)以调用或.bashrc在您的源代码中执行,.profile否则它将永远循环并且您永远不会收到提示。