sudo -s printenv PATH
并sudo -i printenv PATH
显示不同的结果。
sudo -s printenv PATH
打印与 相同sudo printenv PATH
。
根据手册页,-i
选项源设置 PATH 变量。
这意味着 shell 将读取特定于登录名的资源文件,例如 .profile、.bash_profile 或 .login。
关于-s
选项,它说:
运行由 SHELL 环境变量指定的 shell(如果已设置)或由调用用户的密码数据库条目指定的 shell。如果指定了命令,则会通过 shell 的 -c 选项将其传递到 shell 执行。如果未指定命令,则执行交互式 shell。
是否Run the shell specified by the SHELL environment variable if it is set
意味着我可以在执行命令时使用 bash 配置文件sudo -s
?
我需要sudo -s
具有与 相同的环境变量sudo -i
,但我无法使用,sudo -i
因为它更改了目录。
编辑:
/etc/profile.d/ENV_FILE
if ! echo ${PATH} | /bin/grep -q /usr/customized/bin ; then
PATH=/usr/customized/bin:${PATH}
fi
if ! echo ${PATH} | /bin/grep -q /usr/customized/sbin ; then
if [ `/usr/bin/id -u` = 0 ] ; then
PATH=/usr/customized/sbin:${PATH}
fi
fi
读取上面的文件,只有root才能获取路径sbin
。
并且 env 文件部署在 clsuter 上,因此触摸该 env 文件似乎并不合理。
这就是为什么我需要用获取的环境变量sudo -i
,它以 root 用户身份读取上述环境文件。