运行 su 时未获取 .bash_profile

运行 su 时未获取 .bash_profile

我有一个用户,例如user1,对其进行了修改.bash_profile,其中之一更改了PATH,例如:export PATH=/some/place:$PATH。如果我登录user1或执行su - user1.

su但是如果我尝试通过as运行命令root,例如:

su -c test.sh oracle

(测试包含echo $PATH

它似乎没有经过修改PATH(或 root 的PATH,就此而言)。我也尝试过复制.bash_profile.profile,但没有成功。

为什么会发生这种情况?

答案1

使用suwithout-l或作为交互式非登录 shell-启动,它不会从您指定的任何一个文件中读取。bash使用-l-选项或将相关配置放入/root/.bashrc.

配置文件的快速摘要:

  • 登录 shell ( -l/ --login)/etc/profile首先读取,然后是它找到的第一个:~/.bash_profile~/.bash_login~/.profile
  • 交互式但非登录 shell ( -i)按该顺序读取/etc/bash.bashrc和(除非使用该选项并告诉它去其他地方查找)。 ~/.bashrc--rcfile
  • 非交互式 shell,例如从另一个程序中启动而不使用-l-i标志,读取环境变量中指定的文件BASH_ENV
  • 当作为登录 shell 运行时sh,它将按顺序读取/etc/profile和。~/.profile
  • 当作为交互式非登录运行时sh,它会读取ENV.

答案2

Bash 的行为有所不同,具体取决于它是否认为它是登录 shell,即登录系统时运行的第一个 shell。它仅读取.bash_profile登录 shell。如果您将PATH更改代码放入.bashrc其中,它将针对所有交互式 bash shell 运行,而不仅仅是登录 shell。

答案3

如果在 Scientific Linux 6(或者可能是 RHEL 6)中使用 Gnome 环境,请启动终端。转到Edit-> Profile Preferences->"Title and Command"选项卡。确保选中“作为登录 shell 运行命令”复选框。我发现 Gnome 终端应用程序会忽略我的,.bash_profile除非我这样做。

相关内容