为什么.profile(而不是.bashrc)将〜/ bin附加到路径?


9

既然.bashrc是“泛型”的(从.profile源头上讲),为什么“包含~/bin到路径”过程不在内部.bashrc?为什么用户不希望在非登录外壳中使用它?(尤其是在当今,非登录外壳更为常见*。)

我知道我可以手动进行此类更改,但是我想知道是否有原因。

*无法证明,但我认为是这种情况。

Answers:


13

~/.bashrc/etc/bash.bashrc在每次bash启动交互式shell 时运行。

相反,在每次启动任何登录 Shell 时都会运行~/.profile和。因此,它不必一定是shell,而必须一定是登录shell(而且许多shell实例不是login shell)。/etc/profilebashbash

  • bash壳是一个壳,其中所述壳的程序,提供它bash,而不是某些其他程序,如dash
  • 登录外壳程序是由于登录而自动启动的外壳程序,以提供用于登录的用户界面(图形或命令行)。退出登录外壳程序后,登录将终止。

因此,PATHbashrc文件中添加一条将条目追加到其中的命令将是:

  1. 当外壳不在时什么也不做bash,通常是这种情况。例如,PATH当您处于图形登录会话中时,将保持不变。记住,PATH不仅仅是命令行程序使用。

  2. 在存在嵌套bash壳的情况下,一遍又一遍地添加它。因此,如果您在外壳程序内启动外壳程序(出于各种原因这是很常见的),那么您将有多个~/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

非登录外壳将登录外壳(或行为类似于登录外壳)作为其父外壳,并PATH从该登录外壳继承其大多数环境变量,包括。因此,放置修改路径的命令~/.profile要求您注销然后重新登录才能使它们生效,但是这也会影响非登录外壳程序的环境(以及非外壳程序的环境,因为每个程序都会获得其作用)。从其父进程继承的自己的环境变量集(称为“环境”)。


我明白。但是这个决定对我来说仍然没有意义。如果现在打开一个终端,它仅加载.bashrc,那么我将看不到我的私人垃圾箱。
凌晨

@borges如果默认配置对您而言不合适,则可以随意进行更改。(毕竟,这是您的计算机。或者至少是您的帐户。)但这听起来像一次性的事情。也就是说,听起来好像您的私有bin目录在您登录时不存在,并且您是在此登录会话期间创建的。如果您注销并重新登录,它将在您的中PATH。由于创建私有bin目录仅需要执行一次,因此这是一次性的麻烦。
伊莱亚·卡根

3

这是因为传统上环境变量仅在/etc/profile或中使用.profile。该bashrc文件用于别名,提示设置,shell选项等内容(即与shell直接相关的内容)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.