可能重复: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.
将登录和非登录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输入命令一样。
查看http://mywiki.wooledge.org/DotFiles,了解除man bash
之外的主题资源。
摘要:
~/.bash_profile
或~/.profile
的时候。由于您从登录shell运行的所有内容都继承了登录shell的环境,因此您应该将所有环境变量放在那里。像LESS
,PATH
,MANPATH
,LC_*
,...例如,请参阅:My .profile
~/.bashrc
,而不是/.profile
或~/.bash_profile
,因此在那里定义仅适用于bash的所有内容。这是函数,别名,仅限bash的变量,如HISTSIZE(这不是环境变量,不导出它!),shell选项与set
和shopt
等。例如,请参阅:My .bashrc
~/.bashrc
而只执行~/.profile
或~/.bash_profile
,因此您应该从后者手动获取该值。你会看到我在我的~/.profile
那样做:source ~/.bashrc
。从bash手册页:
当bash作为交互式登录shell或作为具有
--login
选项的非交互式shell调用时,它首先从文件/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放在第一个。
.bash_profile
被加载为“登录shell”。我不确定在OS X上会是什么,但在X11或虚拟终端的Linux上。
每次运行Bash时都会加载.bashrc
。这是你应该在打开一个新的Terminal.app窗口时放置你想要加载的东西的地方。
我个人把所有内容放在.bashrc
中,这样我就不必重新启动应用程序以使更改生效。