我安装了 CentOS 7,其中 /bin/sh 是 bash 的符号链接。然而,当使用 sudo 时,它们的行为有所不同。例如使用“sudo sh”:
[[email protected] ~]$ sudo sh
sh-4.2# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
使用“sudo bash”:
[[email protected] ~]$ sudo bash
[[email protected] centos]# echo $PATH
/opt/puppetlabs/puppet/bin:/sbin:/bin:/usr/sbin:/usr/bin
额外的 PATH 元素来自 /etc/profile.d/-script。为什么它不显示“sudo sh”?
答案1
~/.bashrc
来源/etc/bashrc
,然后来源/etc/profile.d/*
(但不是/etc/profile
?)。我不知道这种令人困惑的行为是否特定于 Redhat 派生系统。
~/.bashrc
当作为非登录 shell 运行时,由 bash 获取。 (当它作为登录 shell 运行时,bash 文档建议您需要确保~./bashrc
在您的 ) 中手动采购~/.bash_profile
。
但是当你运行时sh
,~/.bashrc
就没有来源了。 sh
除非作为登录 shell 运行,否则不会获取任何内容。
避免这种混乱的一种可能方法是,如果您愿意sudo -i
,它会运行登录 shell。使用的 shell 是根据目标用户的 shell 选择的(即root
默认情况下)。