为什么“sudo sh”不源 profile.d 脚本

为什么“sudo sh”不源 profile.d 脚本

我安装了 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默认情况下)。

相关内容