我正在创建一个设置机器的实例配置脚本。
我通过 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
文件可能包含假设它们在终端上执行的内容,并且需要花时间设置键绑定、别名、提示等。
明智的解决方案是将环境变量定义放在它们所属的位置,即~/.profile
or中~/.pam_environment
。
¹除非由于某些奇怪的原因调用 bash 。sshd