我的很多工作流程都涉及使用 sudo 交互式会话 ( sudo -i
) 作为服务用户,它能够运行我的个人用户名不能运行的某些事情。当我这样做时,我喜欢保留我的 PS1 变量和其他一些小的 bash 细节。由于我无法修改服务用户的.bashrc
,我在我的主目录中设置了一个脚本,以便根据我的喜好导出它。例如,我的工作流程可能如下所示:
ssh me@remote
sudo -i -u service_user
. /home/me/ps1.sh
*service user commands here*
exit
我想滚动 sudo 命令并将 PS1 脚本采购到一个命令中。我的想法是使用类似的东西sudo -i -u service_user -c sh ". /home/me/ps1.sh"
,它将传递命令 - 问题是命令运行后会话将立即退出,而不是在交互模式下挂起。没有请求管理员允许通过 sudo 保留 PS1 变量,我能做些什么吗?
您可以
--rcfile
用来告诉 bash 读取您的ps1.sh
文件而不是service_user
's.bashrc
:sudo
然后执行流程将类似于bash -lc 'bash --rcfile /home/me/ps1.sh'
以service_user
. 如果要获取service_user
's.bashrc
,可以在ps1.sh
文件中进行。-i
insudo -i
不是“交互式”的,它是一个登录shell(即,启动一个 shell,它将处理目标用户.profile
或等效用户并运行给定的命令)。这就是执行包含bash -l
实际命令的原因。如果service_user
's.profile
无关紧要,您可以这样做: