2012-04-25 44 views
15

我有几个bash脚本,我想确保在默认情况下运行,并且我正在将它们存储在我的mac上的~/.profile中。这是存储它们的错误地方吗?我听说过其他人,并尝试他们(如~/.bashrc,~/.bash_profile等),但他们似乎并没有工作。为什么我必须继续使用`source〜/ .profile`来获取设置?

所有这些和我将哪些脚本放在一起以便在运行时进行配置和我不必每次打开终端时都要拨打$ source ~/.profile有什么区别?

+0

另请参阅http://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment – Nakilon 2013-08-04 18:54:01

回答

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

interactive shell会自动源~/.bashrc

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

+0

我会试试这个。登录shell和其他登录shell有什么区别? – locoboy 2012-04-25 18:10:09

+1

交互式外壳是您在终端内部运行的外壳;也就是说,stdin和stdout都指向终端的文件描述符。您使用的99%的shell将作为交互式shell运行。 – 2012-04-25 18:12:10

+0

如何确保我正在运行互动而不是另一个?看起来我正在运行另一个。 – locoboy 2012-04-25 18:13:04

2

不同的bash设置会根据配置自动获取不同的文件。始终采用的几乎通用的文件是~/.bashrc - 这是一个bash核心内容,它将加载此文件。在那个文件中,你应该添加你的行到source ~/.profile,你会很开心!

CNC中

从我的Linux和我的同事的Mac:

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

我试过这个,但它仍然不工作 – locoboy 2012-04-25 17:54:43

+0

我仔细检查了解决方案在同事的Mac上发布。在这一点上,您能否提供有关机器上正在发生的事情的任何见解?如果你可以运行和发布ls -l〜/ .bashrc,ls -l〜/ .profile,cat〜/ .bashrc,cat〜/ .profile – 2012-04-25 17:59:29

+1

.bashrc只有在shell是交互式的时候才会被发送,而不是*登录贝壳。按照惯例,.bashrc是从'〜/ .bash_login'调用的,但这不一定如此......所以你不能指望被调用的.bashrc。查看@ kev的帖子中的链接。 – 2012-04-25 18:02:02

5

我这来纠正该问题:

cat .bash_profile >> .profile 
rm .bash_profile 

另一种方法是:

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

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

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

援引作为交互式登录壳,或用--login

当bash被调用以交互登录壳,或作为非交互式壳与--login选项,它首先从文件/etc/profile中读取并执行命令,如果该文件存在。读完该文件后,它会按顺序查找~/.bash_profile,~/.bash_login~/.profile,并读取并执行第一个存在且可读的命令。

[...]

作为交互非登录壳

当交互式壳不是登录shell启动时,bash读取并从~/.bashrc执行命令如果文件已存在。

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

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

2

确保如果你source ~/.profile.bashrc你注释掉或删除任何命令(在.profile)打电话或源在.profile.bashrc,否则将永远循环下去,你将永远不会得到提示。

相关问题