26

我有几个 bash 脚本,我想确保它们默认运行,我目前将它们存储在~/.profile我的 mac 上。那是存放它们的错误地方吗?我听说过其他人并尝试过它们(如~/.bashrc,~/.bash_profile等),但它们似乎不起作用。

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

4

5 回答 5

15

如果两者都~/.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.

于 2013-08-05T03:49:32.510 回答
9
                     +-----------------+
                     |                 |
interactive shell -->|  ~/.bashrc      |
                     |                 |
                     +-----------------+

interactive shell~/.bashrc自动来源。

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

于 2012-04-25T17:45:26.527 回答
7

我做了这些来纠正这个问题:

cat .bash_profile >> .profile
rm .bash_profile

替代方法是:

echo "source ~/.profile" >> .bash_profile
于 2013-01-11T15:49:42.947 回答
5

确保如果你source ~/.profile在你的.bashrc那你注释掉或删除任何命令(in .profile)来调用或.bashrc在你的源代码,.profile否则它将永远循环并且你永远不会得到提示。

于 2015-10-01T18:00:18.997 回答
2

bash 的不同设置将根据其配置自动获取不同的文件。始终来源的几乎通用文件是~/.bashrc- 这是一个 bash 核心的东西,它将加载这个文件。在那个文件中,你应该添加你的行source ~/.profile,你会很高兴的!

-编辑-

在我的 Linux 和我同事的 Mac 上:

$ echo "echo hello" >> ~/.profile
$ echo "source ~/.profile" >> ~/.bashrc
$ bash
Hello
$ 
于 2012-04-25T17:43:43.533 回答