关于.bash_profile,.bashrc和别名应该写在哪里?
可能的重复: .bashrc,.bash_profile和.environment有什么区别?
看来,如果我使用
alias ls='ls -F'
在Mac OS X的.bashrc里面,新创build的shell将不会有这个别名。 我需要再次inputbash
,这个别名才会生效。
如果我login到托pipe公司的Linux上, .bashrc
文件有一条注释行:
对于非loginshell
和.bash_profile
文件有一个评论说
为loginshell
那么别名应该写在哪里呢? 我们如何分离loginshell和非loginshell?
有些网页说使用.bash_aliases
,但它似乎不适用于Mac OS X。
将login和非login shell分开的原因是,每次启动Bash的新副本时都会重新加载.bashrc
文件。 .profile
文件只有在您login或使用适当的标志告诉Bash充当loginshell时才加载。
亲自,
- 我把我的
PATH
设置到一个.profile
文件(因为我有时使用其他shell); - 我把我的Bash别名和函数放到我的
.bashrc
文件中; -
我把这个
#!/bin/bash # # CRM .bash_profile Time-stamp: "2008-12-07 19:42" # # echo "Loading ${HOME}/.bash_profile" source ~/.profile # get my PATH setup source ~/.bashrc # get my Bash aliases
在我的
.bash_profile
文件中。
哦,而且你需要再次inputbash
来得到新的别名的原因是Bash在启动时会加载你的.bashrc
文件,但是除非你告诉它,否则它不会重新加载它。 您可以重新加载.bashrc
文件(而不需要第二个shell)
source ~/.bashrc
它加载.bashrc
文件,就好像你已经直接input命令给Bash。
查看http://mywiki.wooledge.org/DotFiles关于除;man bash
之外的主题的优秀资源。
概要:
- 你只login一次,这是
~/.bash_profile
或~/.profile
被读取和执行的时候。 由于你从loginshell运行的所有东西都inheritance了loginshell的环境,所以你应该把所有的环境variables放在那里。 像LESS
,PATH
,MANPATH
,LC_*
,…例如,请参阅: 我的.profile
- login后,您可以运行多个shell。 想象一下,login,运行X,然后在X中启动一些带有bash shell的terminal。 这意味着你的loginshell启动了X,它inheritance了loginshell的环境variables,这启动了你的terminal,它启动了你的非loginbash shell。 你的环境variables在整个链中传递,所以你的非loginshell不需要加载它们。 非loginshell只执行
~/.bashrc
,而不是/.profile
或~/.bash_profile
,因此,在这里定义了所有只适用于bash的东西 。 这就是函数,别名, 只有bash的variables,比如HISTSIZE(这不是一个环境variables,不会导出!) ,带有set
和shopt
shell选项等等。例如: My.bashrc
- 现在,作为UNIX特性的一部分,loginshell不会执行
~/.bashrc
而只会执行~/.profile
或~/.bash_profile
,所以您应该从后者手动获取。 你会看到我在~/.profile
也是这样做的:~/.profile
source ~/.bashrc
。
从bash的manpage:
当bash作为交互式loginshell或者作为具有
--login
选项的非交互式shell调用时,它首先从文件/etc/profile
读取和执行命令(如果该文件存在)。 读取该文件后,它将按照该顺序查找~/.bash_profile
,~/.bash_login
和~/.profile
,并从第一个存在并读取的第一个中读取和执行命令。 当shell开始禁止这种行为时,可以使用--noprofile
选项。当loginshell退出时,bash会从
~/.bash_logout
文件中读取和执行命令(如果存在)。当一个不是loginshell的交互式shell被启动时,如果该文件存在,bash将读取并执行
~/.bashrc
命令。 这可以通过使用--norc
选项来禁止。--rcfile
文件选项将强制bash从文件读取并执行命令,而不是~/.bashrc
。
因此,如果要为loginshell和交互式非loginshell获取相同的行为,则应将所有命令放在.bashrc
或.bash_profile
,然后将其他文件放在第一个。
.bash_profile
被加载为“loginshell”。 我不确定在OS X上会是什么,但在Linux上是X11还是虚拟terminal。
每次运行Bash时加载.bashrc
。 当你打开一个新的Terminal.app窗口的时候,你应该把你想要加载的东西放在那里。
我个人把所有东西放在.bashrc
这样我就不必重新启动应用程序以使更改生效。