“sudo -s env”与“sudo -i env”

“sudo -s env”与“sudo -i env”

sudo -s printenv PATHsudo -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 用户身份读取上述环境文件。

相关内容