我想知道这些文件.bashrc
与.bash_profile
通常在 Linux 或 Mac OS 操作系统中的用户家中存放的文件有什么区别。
如果它们相同,您只能拥有其中一个文件吗?
就我而言,我家中只有 .bash_profile 文件,我需要执行以下命令:
echo PATH=\"\$NPM_PACKAGES/bin\:\$PATH\" >> ${HOME}/.bashrc
如果我将其更改为以下内容,是否会相同?
echo PATH=\"\$NPM_PACKAGES/bin\:\$PATH\" >> ${HOME}/.bash_profile
.bash_profile
它只运行一次,当您登录时。.bashrc
每次启动解释器时都会执行bash
。执行第一个命令时,如果文件
.bashrc
不存在,则创建该文件。如果它已经存在,则将该行添加到末尾。由于您要添加的行的目的,最好将其添加到
.bashrc
.传统上,当您登录 Unix 系统时,系统会为您打开一个程序。该程序是外壳程序,即旨在启动其他程序的程序。它是一个命令行外壳:您可以通过输入另一个程序的名称来启动另一个程序。
~/.profile
默认的 shell,Bourne shell,在登录 shell 调用时读取命令。Bash 是一个类似 Bourne 的 shell。
~/.bash_profile
从作为登录 shell 调用时读取的命令。如果该文件不存在¹尝试读取~/.profile
.您可以随时直接调用 shell。例如,在 GUI 环境中运行终端仿真器。如果 shell 不是登录 shell,则不要读取
~/.profile
. 当您将 bash 作为交互式 shell 启动时(即不运行脚本),它会读取~/.bashrc
(除非它作为登录 shell 调用,在这种情况下它只会读取~/.bash_profile
or~/.profile
)。所以:
~/.profile
它是保存适用于整个会话的内容的文件,例如您登录时要启动的程序(但不是图形程序,因为它们位于不同的文件中)和环境变量定义。~/.bashrc
是用于存储仅适用于 bash 本身的内容的文件,例如别名和函数定义以及提示设置。(您也可以将键绑定放在这里,但在 bash 中它们通常放在 中~/.inputrc
)。~/.bash_profile
可以用来代替~/.profile
,但它只能被 bash 读取,而不能被其他 shell 读取。(如果您希望初始化文件在不同的机器上工作并且 bash 不是所有机器的登录 shell,请务必注意这一点。)~/.bashrc
如果 shell 是交互式的,那么这是包含的逻辑位置。因此,我建议将以下内容放入~/.bash_profile
:在现代 UNIX 系统上,还有一个与
~/.profile
. 如果您在图形环境中登录(也就是说,如果您输入密码的程序正在图形模式下运行),您不会自动收到显示为~/.profile
. 根据您之后运行的图形登录程序、窗口管理器或桌面环境以及您的发行版如何配置这些程序,您~/.profile
可能会阅读,但可能不会。如果它没有读取,通常还有另一个地方来定义环境变量和登录时要启动的程序,但不幸的是,那个地方没有标准位置。请注意,您可能会在这里和那里阅读有关将环境变量定义放入
~/.bashrc
或在终端上启动登录 shell 的建议。两者都是坏主意。这些想法最常见的问题是,您的环境变量只会在从终端启动的程序中设置,而不会在那些直接使用图标、菜单或键盘快捷键启动的程序中设置。¹如果
.bash_profile
它不存在,bash 也会在尝试.bash_login
之前尝试.profile
. 随意忘记它的存在。~/.bashrc 是放置仅适用于 bash 本身的内容的地方,例如别名和函数定义、shell 选项和系统设置。(您也可以将关键链接放在那里,但对于 bash,它们通常放在 ~/.inputrc 中。)
~/.bash_profile 可以用来代替 ~/.profile,但它是由 bash 读取的,而不是由任何其他 shell 读取的。(如果您希望初始化文件在多台机器上工作并且您的登录 shell 不是所有机器上的 bash,则这更令人担忧。)如果它是您的交互式 shell,这是一个包含 ~/.bashrc 的合乎逻辑的地方。我推荐 ~/.bash_profile 中的以下内容: