可能重复: What's the difference between .bashrc, .bash_profile, and .environment?
似乎如果我使用
alias ls='ls -F'
在Mac OS X上的.bashrc中,然后新创建的shell将没有该别名。我需要再次输入bash
,该别名将生效。
如果我在托管公司登录Linux,.bashrc
文件的评论行会显示:
对于非登录shell
并且.bash_profile
文件的评论为
登录shell
那么别名应该写在哪里?为什么我们将登录shell和非登录shell分开?
有些网页上说使用.bash_aliases
,但它似乎无法在Mac OS X上运行。
答案 0 :(得分:154)
将 login 和非登录 shell分开的原因是每次启动Bash的新副本时都会重新加载.bashrc
文件。只有在您登录或使用适当的标志告诉Bash充当登录shell时才会加载.profile
文件。
就个人而言,
PATH
设置放入.profile
文件中(因为我有时会使用其他shell); .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键入命令一样。
答案 1 :(得分:114)
除了man bash
之外,请查看 http://mywiki.wooledge.org/DotFiles以获取有关该主题的优秀资源。
要点:
~/.bash_profile
或~/.profile
的时间。由于您从登录shell运行的所有内容都继承了登录shell的环境,因此您应该将所有环境变量放在那里。与LESS
,PATH
,MANPATH
,LC_*
一样,...例如,请参阅:My .profile
~/.bashrc
,而不是/.profile
或~/.bash_profile
,因此在那里定义仅适用于bash 的所有内容。这是函数,别名,仅限bash的变量,如HISTSIZE(这不是环境变量,不导出它!),包含set
和shopt
的shell选项等。有关示例,请参阅:My .bashrc
~/.bashrc
而只执行~/.profile
或~/.bash_profile
,因此您应该从后者手动获取该{1}}。您也会看到我在我的~/.profile
中执行此操作:source ~/.bashrc
。答案 2 :(得分:12)
来自bash手册页:
当bash被调用为 交互式登录shell,或作为 非交互式shell
--login
选项,它首先从文件中读取并执行命令/etc/profile
,如果该文件存在。 在阅读该文件后,它会查找~/.bash_profile
,~/.bash_login
和。{~/.profile
,按此顺序,并阅读 并执行第一个命令 一个存在且可读的。该 启动shell以禁止此操作时,可以使用--noprofile
选项 行为。当登录shell退出时,bash 从中读取并执行命令 文件
~/.bash_logout
,如果存在。当启动不是登录shell的交互式shell时,bash 如果该文件存在,则从
~/.bashrc
读取并执行命令。这个 可以使用--norc
选项禁止。--rcfile
文件选项 将强制bash从文件中读取和执行命令而不是~/.bashrc
。
因此,如果要为登录shell和交互式非登录shell获取相同的行为,则应将所有命令放在.bashrc
或.bash_profile
中,然后使用另一个档案source第一个。
答案 3 :(得分:1)
.bash_profile
。我不确定在OS X上会是什么,但在X11或虚拟终端的Linux上。
.bashrc
。无论何时打开一个新的Terminal.app窗口,都应该放置你想要加载的东西。
我个人将所有内容都放在.bashrc
中,这样我就不必重新启动应用程序以使更改生效。