别名应该放在.bashrc 还是.bash_profile 中?

可能的复制品: . bashrc、 . bash _ profile 和. environment 之间的区别是什么?

看来如果我用

alias ls='ls -F'

里面。在 Mac OS X 上使用 bashrc,那么新创建的 shell 就不会有这个别名。我需要输入 bash再次和别名将生效。

如果我在主机托管公司登录到 Linux,.bashrc文件有一个注释行说:

用于非登录 shell

.bash_profile文件有一条注释说

用于登录 shell

那么别名应该写在哪里呢? 为什么我们要把登录 shell 和非登录 shell 分开呢?

一些网页说使用 .bash_aliases,但它似乎不能在 Mac OS X 上工作。

110453 次浏览

为一个“登录 shell”加载 .bash_profile。我不确定在 OS X 上是什么,但在 Linux 上,它是 X11或虚拟终端。

每次运行 Bash 时都会加载 .bashrc。当你打开一个新的 Terminal. app 窗口时,你应该把你想加载的东西放在这里。

我个人将所有内容都放在 .bashrc中,这样我就不必重新启动应用程序来使更改生效。

登入非登入 shell 分开的原因是,每次启动新的 Bash 副本时都会重新加载 .bashrc文件。只有当您登录或使用适当的标志告诉 Bash 作为登录 shell 时,才加载 .profile文件。

就我个人而言,

  • 我将我的 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文件里。

哦,您需要再次键入 bash来获得新别名的原因是 Bash 在启动时加载您的 .bashrc文件,但是除非您让它这样做,否则它不会重新加载该文件。您可以重新加载 .bashrc文件(并且不需要第二个 shell)

source ~/.bashrc

它加载 .bashrc文件,就好像您已经将命令直接键入到 Bash 中一样。

来自 bash 页面:

当 bash 作为 交互式登录 shell,或作为 非交互式 shell 选项,它首先从文件中读取和执行命令 如果该文件存在,则为 /etc/profile。 在读取该文件之后,它将查找 ~/.bash_profile~/.bash_login,和 ~/.profile,按照这个顺序,读取 并执行第一个命令 一个存在并且可读的 当 shell 启动时,可以使用 --noprofile选项来抑制这种情况 行为。

当登录 shell 退出时,bash 控件读取和执行命令 文件 ~/.bash_logout,如果它存在的话。

当启动不是登录 shell 的交互式 shell 时,bash 读取和执行来自 ~/.bashrc的命令(如果该文件存在) 可以通过使用 --norc选项来抑制 将强制 bash 从文件读取和执行命令,而不是 ~/.bashrc.

因此,如果希望对登录 shell 和交互式非登录 shell 获得相同的行为,应该将所有命令放在 .bashrc.bash_profile中,然后将另一个文件 来源放在第一个文件中。

查看 译自: 美国《 http://mywiki.wooledge.org/dotfiles 》杂志网站(http://mywiki.woledge.org/DotFiles)原著: 以获得除 man bash之外关于这个主题的优秀资源。

摘要:

  • 您只需登录一次,这是读取和执行 ~/.bash_profile~/.profile的时间。由于从登录 shell 运行的所有内容都继承登录 shell 的环境,因此应该将所有的 环境变量都放在那里。像 LESSPATHMANPATHLC_*,... 例如,参见: 我的 .profile
  • 一旦登录,就可以运行多个 shell。想象一下登录、运行 X 和在 X 中使用 bash shell 启动几个终端。这意味着您的登录 shell 启动了 X,它继承了您的登录 shell 的环境变量,从而启动了您的终端,从而启动了您的非登录 bash shell。您的环境变量在整个链中传递,因此您的非登录 shell 不再需要加载它们。由于这个原因,非登录 shell 只执行 ~/.bashrc,而不执行 /.profile~/.bash_profile,因此在这里定义了 只适用于 bash的所有内容。也就是函数、别名、 Bash-only 变量,比如 HISTSIZE (这不是一个环境变量,不要导出它!)、带有 setshopt的 shell 选项等等。例如,请参见: 我的 .bashrc
  • 现在,作为 UNIX 特性的一部分,登录 shell 不执行 ~/.bashrc,而只执行 ~/.profile~/.bash_profile,因此您应该从后者手动获取这个登录 shell。你会看到我在我的 ~/.profile中也这样做: source ~/.bashrc