我有一个用户,例如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
使用su
without-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
除非我这样做。