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

时间:2012-04-25 17:40:35

标签: macos bash terminal

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

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

5 个答案:

答案 0 :(得分:11)

如果~/.bash_profile~/.profile都存在,则bash仅在作为交互式登录shell调用时才会读取~/.bash_profile

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时,如果该文件存在,Bash将从~/.bashrc读取并执行命令。

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

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

答案 1 :(得分:8)

                     +-----------------+
                     |                 |
interactive shell -->|  ~/.bashrc      |
                     |                 |
                     +-----------------+

interactive shell会自动提取~/.bashrc

查看Should the .bashrc in the home directory load automatically?

答案 2 :(得分:5)

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

cat .bash_profile >> .profile
rm .bash_profile

替代方案是:

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

答案 3 :(得分:4)

确保您在source ~/.profile.bashrc注释掉.profile或删除任何命令(.bashrc中)以致电.profile search_field.send_keys("Search Term") WebDriverWait(browser, 2).until( expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, 'ul.ui-autocomplete')), "Autocomplete didn't pop up" ) 或者它将永远循环,你永远不会得到提示。

答案 4 :(得分:2)

不同的bash设置会根据其配置自动提供不同的文件。总是来源的几乎通用的文件是~/.bashrc - 这是一个bash核心的东西,它将加载这个文件。在该文件中,您应该将您的行添加到source ~/.profile,然后您就可以开始了!

- 编辑 -

来自我的Linux和我的同事的Mac:

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