关于.bash_profile,.bashrc,以及应该写入别名的位置?

nop*_*ole 119 bash shell environment

可能重复: .bashrc,.bash_profile和.environment之间有什么区别?

好像我用了

alias ls='ls -F'
Run Code Online (Sandbox Code Playgroud)

在Mac OS X上的.bashrc中,新创建的shell将没有该别名.我需要bash再次键入,该别名将生效.

如果我在托管公司登录Linux,该.bashrc文件有一条注释行,上面写着:

对于非登录shell

并且该.bash_profile文件有一条评论说

用于登录shell

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

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

Cha*_*tin 161

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

亲身,

  • 我把我的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
    
    Run Code Online (Sandbox Code Playgroud)

    在我的.bash_profile档案中.

哦,你需要bash再次输入以获得新别名的原因是Bash .bashrc在启动时加载你的文件,但除非你告诉它,否则它不会重新加载它.您可以.bashrc通过键入来重新加载文件(而不需​​要第二个shell)

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

加载.bashrc文件就像您直接向Bash键入命令一样.

  • 去看看我说的话. (7认同)

lhu*_*ath 118

查看 http://mywiki.wooledge.org/DotFiles提供了关于该主题的优秀资源man bash.

摘要:

  • 您只需登录一次,而当这~/.bash_profile~/.profile读取和执行.由于您从登录shell运行的所有内容都继承了登录shell的环境,因此您应该将所有环境变量放在那里.像LESS,PATH,MANPATH,LC_*,...举一个例子,请参阅:我的.profile
  • 登录后,您可以运行多个shell.想象一下登录,运行X,并在X中使用bash shell启动一些终端.这意味着您的登录shell启动了X,它继承了您的登录shell的环境变量,它启动了您的终端,启动了您的非登录bash shell.您的环境变量在整个链中传递,因此您的非登录shell不再需要加载它们.非登录shell仅执行~/.bashrc,而不是/.profile~/.bash_profile由于这个原因,因此在那里定义仅适用于bash的所有内容.这是函数,别名,仅限bash的变量,如HISTSIZE(这不是环境变量,不导出它!),shell选项setshopt等等.例如,请参阅:我的.bashrc
  • 现在,作为UNIX特点的一部分,登录壳不执行~/.bashrc,但只~/.profile~/.bash_profile,所以你应该从后者手动源的那一个.你会看到我也是这样做的~/.profile:source ~/.bashrc.

  • 这个答案值得更多的赞成.现在我回来第四次看东西了. (7认同)

Ada*_*eld 12

从bash手册页:

当bash作为交互式登录shell或具有该--login选项的非交互式shell调用时 ,它首先从该文件读取并执行命令 /etc/profile(如果该文件存在).读取文件后,它会寻找 ~/.bash_profile,~/.bash_login~/.profile,按照这个顺序读取并执行从存在并且可读的第一个命令.--noprofile启动shell以禁止此行为时可以使用该 选项.

当登录shell退出时,bash从文件中读取并执行命令~/.bash_logout(如果存在).

当启动不是登录shell的交互式shell时~/.bashrc,如果该文件存在,bash将从中读取并执行命令.使用该--norc选项可以禁止这一点.该--rcfile文件选项将强制bash读取和文件,而不是执行命令 ~/.bashrc.

因此,如果要为登录shell和交互式非登录shell获取相同的行为,则应将所有命令放在.bashrc或中.bash_profile,然后将另一个文件放在第一个.