bor*_*ges 9 command-line bash .profile
由于.bashrc
更“通用”(就其.profile
来源而言),为什么“包含~/bin
到路径”程序不在内部.bashrc
?为什么用户不希望在非登录 shell 中使用它?(尤其是如今,非登录 shell 更为常见*。)
我知道我可以手动进行此类更改,但我想知道是否有原因。
*无法证明,但我认为是这样。
Eli*_*gan 13
~/.bashrc
并且/etc/bash.bashrc
在每次bash
启动交互式shell时运行。
相反,每次启动任何登录shell时都会运行~/.profile
和。所以它不必是一个shell,但它必须是一个登录 shell(并且许多shell 实例不是登录 shell)。/etc/profile
bash
bash
bash
壳是一个壳,其中所述壳的程序,提供它bash
,而不是某些其他程序,如dash
。因此,PATH
在bashrc
文件中添加一个将条目附加到的命令将:
当 shell is not 时什么都不做bash
,这通常是这种情况。例如,PATH
当您在图形登录会话中时不会被修改。请记住,PATH
不仅仅是命令行程序使用。
在存在嵌套bash
shell的情况下一遍又一遍地追加它。所以,如果你在一个 shell 中启动一个 shell——这是很常见的,出于各种原因——那么你将有多个~/bin
条目堆叠到你的PATH
. 这使得PATH
环境变量难以读取,有时还会降低性能。
这些都是不可取的。因此,将其放在文件中是错误的bashrc
;它真的属于~/.profile
. ~/.profile
是正确的地方:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)
非登录 shell 将登录 shell(或行为类似于登录 shell 的东西)作为其父级,并PATH
从该登录 shell继承其大部分环境变量,包括。因此,放入路径修改命令~/.profile
需要您注销并重新登录以使它们生效,但这也会影响非登录 shell 的环境(以及非 shell 程序的环境,因为每个程序都获得了它的自己的一组环境变量——称为它的“环境”——从它的父进程继承而来)。