我有几个 bash 脚本,我想确保它们默认运行,我目前将它们存储在~/.profile
我的 mac 上。那是存放它们的错误地方吗?我听说过其他人并尝试过它们(如~/.bashrc
,~/.bash_profile
等),但它们似乎不起作用。
所有这些之间有什么区别,我将脚本放入哪个脚本以便它在运行时配置并且我不必$ source ~/.profile
每次打开终端时都调用?
如果两者都~/.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 使用。
Terminal 和 iTerm 默认打开新的 shell 作为登录 shell(通过执行类似的命令login -pf $USER
),但是许多 GNU/Linux 终端应用程序打开新的 shell 作为非登录 shell。OS X 用户经常~/.bash_profile
使用~/.bashrc
.
+-----------------+
| |
interactive shell -->| ~/.bashrc |
| |
+-----------------+
interactive shell
将~/.bashrc
自动来源。
我做了这些来纠正这个问题:
cat .bash_profile >> .profile
rm .bash_profile
替代方法是:
echo "source ~/.profile" >> .bash_profile
确保如果你source ~/.profile
在你的.bashrc
那你注释掉或删除任何命令(in .profile
)来调用或.bashrc
在你的源代码,.profile
否则它将永远循环并且你永远不会得到提示。
bash 的不同设置将根据其配置自动获取不同的文件。始终来源的几乎通用文件是~/.bashrc
- 这是一个 bash 核心的东西,它将加载这个文件。在那个文件中,你应该添加你的行source ~/.profile
,你会很高兴的!
-编辑-
在我的 Linux 和我同事的 Mac 上:
$ echo "echo hello" >> ~/.profile
$ echo "source ~/.profile" >> ~/.bashrc
$ bash
Hello
$