关于.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放在那里。 像LESSPATHMANPATHLC_* ,…例如,请参阅: 我的.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,不会导出!) ,带有setshopt 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这样我就不必重新启动应用程序以使更改生效。