为什么root不提供.bash_profile文件?


10

每次我尝试使用su(not su -)作为root用户登录时,它都不来自.bash_profileuser1的主目录。

基本上,我的/var/root目录没有.bash_profile,所以我将.bash_profilein 的副本放入/var/roottest中su -

它也不会自动.bash_profile(在中var/root)提供源。

无论如何,我想.bash_profile在使用时自动将user1 设为root帐户su

我该怎么办?

(它曾经工作过!有一天,它只是没有来源!也许bash中的设置发生了变化?source .bash_profile登录后进入时可以工作。)

我正在使用Mac和OS X Yosemite。

Answers:


11

rootOS X上的默认shell 是/bin/sh。它sh也是的一个版本bash,但是在使用名称shBash 调用时

尽量模仿历史版本的启动行为sh,同时也要符合POSIX标准。

当作为交互式登录外壳程序或带--login选项的非交互式外壳程序调用时,它首先尝试按此顺序/etc/profile和读取和执行命令~/.profile。...以sh调用的shell不会尝试从任何其他启动文件读取和执行命令

也就是说.bash_profile无论它是否作为登录shell调用,它都不会读取。您可以.profile改用,甚至可以将它们彼此符号链接。如果使用来启动登录shell su -l.profile则启动时.bash_profile会加载,但永远不会。


您也可以使用dscl来改变根的shell(注意/etc/passwd不是用于确定在OS X的外壳)。您可以使用dscl . -read /Users/root UserShell; 检查root的当前shell 。在将其更改为其他内容之前,请查阅文档并仔细考虑。

另一种方法是简单地更改您的su调用以强制bash立即执行。

根据您的发言,我可能会建议使用符号链接,但是您可能希望研究Bash的POSIX模式所做的更改,并确定是否要使用它们。



5

由于您没有调用登录shell,因此root用户将尝试执行.bashrc文件而不是.bash_profile。

从bash手册man bash

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

请注意~.bashrc文件需要在root用户的主目录中的位置。

要真正回答您的问题,如果您要使用user1的.bashrc文件,我建议您在从user1到根用户的源.bashrc之间建立(符号)链接。

您还可以考虑通过将行添加. /homedirectory/of/user1/.bash_profile到root用户的.bashrc文件中来获取user1 .bashrc甚至是.bash_profile 。

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.