在 shell 环境中以非特权用户身份运行脚本的某些部分

在 shell 环境中以非特权用户身份运行脚本的某些部分

我正在创建一个设置机器的实例配置脚本。

我通过 sudo ie 运行脚本sudo run.sh。大多数步骤需要 root 访问权限,但脚本的某些步骤不需要 root 访问权限,我更喜欢以运行 sudo 的非特权用户身份运行它们。

在使用 sudo 运行的脚本中,我正在尝试执行以下操作

sudo -i -u username sh -c 'echo $MY_ENV'

由于.bashrc包含export MY_ENV=something我希望上面的命令打印“某事”

如何在脚本内临时切换到其他用户来运行以下命令包含用户的 shell 环境

答案1

.bashrc仅由交互式 shell 执行,而不是由脚本执行。这是定义环境变量的错误位置。看是否有一个所有 shell 都能读取的“.bashrc”等效文件?Ubuntu 维基

您可以告诉 bash 显式读取.bashrc。当然,您必须执行bash,而不是sh可能是不同的 shell:

sudo -i -u username bash -c '. `~/.bashrc; echo "$MY_ENV"'

但这是一个坏主意,因为.bashrc文件可能包含假设它们在终端上执行的内容,并且需要花时间设置键绑定、别名、提示等。

明智的解决方案是将环境变量定义放在它们所属的位置,即~/.profileor中~/.pam_environment

¹除非由于某些奇怪的原因调用 bash 。sshd

相关内容