.bash_profile在运行su时未获得


41

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

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

su -c test.sh oracle

(测试包含echo $PATH

它似乎没有修改PATH(或root的修改PATH)。我也尝试过复制.bash_profile.profile,但无济于事。

为什么会这样呢?


使用--login切换至su
Nikhil Mulley,2012年

1
仅供参考-关于bash配置文件的不错的文章hacktux.com/bash/bashrc/bash_profile
Nikhil Mulley,

Answers:


60

使用su没有-l-开始bash作为一个互动的,但非登录shell,不从任何你指定的文件中读取。使用-l-选项,或将相关配置放入/root/.bashrc

配置文件快速摘要:

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

5

Bash的行为会有所不同,具体取决于它是否认为它是登录外壳程序,即登录到系统时运行的第一个外壳程序。仅.bash_profile在它是登录外壳程序时才读取。如果将PATH-changing代码放进去.bashrc,它将在所有交互式bash shell中运行,而不仅是登录shell。


0

如果在Scientific Linux 6(或大概是RHEL 6)中使用Gnome环境,请启动终端。转到Edit-> Profile Preferences-> "Title and Command"选项卡。确保选中“作为登录外壳运行命令”复选框。我发现Gnome终端应用程序无视我,.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.