为什么要将 ~/.profile 添加到 ~/.bash_profile 中?

为什么要将 ~/.profile 添加到 ~/.bash_profile 中?

安装时右室VM收到以下消息:

* WARNING: You have '~/.profile' file, you might want to load it,
  to do that add the following line to '/home/dotancohen/.bash_profile':

    source ~/.profile

我很担心,因为我的 ~/.profile 文件包含xmodmap ~/.Xmodmap我显然不想在每次打开新 shell 时运行的文件(交换我的 CapsLock 和 ESC 键)。

为什么明智的 RVM 开发人员会建议.profile采购.bash_profile

答案1

.profile.bash_profile就它们的执行时间而言,它们是相同的:它们在您登录时执行。不同之处在于,只有 bash运行.bash_profile; Bourne 风格的 shell(dash、ksh 等)运行.profile.profile如果.bash_profile不存在,Bash 本身就会运行。

即使您使用 bash 作为登录 shell,.profile它通常也是您以图形模式登录时执行的 shell — 许多发行版都将 X 会话启动脚本设置为sh.profile.

因此建议使用.profile而不是.bash_profile执行诸如定义环境变量之类的操作。除非您绝对需要 bash 特定的功能,否则只需将所有内容放入.profile.但即使你这样做,保留 a 也是有原因的.bash_profile,那就是当 bash 加载它时,它不会加载.bashrc,即使它是交互式的。因此,对于大多数人来说,~/.bash_profile应该由这两行组成:

. ~/.profile
case  $- in *i*) . ~/.bashrc;; esac

你不应该xmodmap逃避.profile。当您打开新 shell 时,不会执行此操作,但会执行,例如,当您使用带有 X11 转发的 SSH 远程登录时。不幸的是,当您以图形模式登录时,没有加载标准文件。 Debian 加载~/.xsessionrc(我认为这适用于所有显示管理器,除了 Gdm 加载~/.xprofile);其他发行版有不同的设置。如果您需要跨发行版可移植性,将桌面环境配置为xmodmap在启动时执行可能会更容易。如果您所做的只是交换 CapsLock 和 Ctrl,则可以使用大多数现代桌面环境提供的接口的 XKB 设置来完成。

答案2

请记住,bash(1) 是唯一读取 的 shell .bash_profile,其他 Bourne shell 衍生版本仅读取.profile。如果您有时使用另一个 shell,您会希望保留.profile.

相关内容