我试图以 root 身份运行命令,但它不起作用,我认为原因是因为在运行命令时 sudo 没有将 $HOME 设置为 /root 而是将其保留为 /home/MYUSER,我运行的命令是:
$ sudo -H -u root bash -c "echo $HOME"
/home/MYUSER
我也尝试了以下方法,结果相同:
sudo su -c "echo $HOME" root
请注意,我遇到的实际问题是尝试运行 MYUSER 无权执行的 kubectl 命令,因此我实际尝试执行的命令是:
sudo -H -u root bash -c "kubectl get pods"
[sudo] password for MYUSER:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
我认为问题出在 $HOME 上,因为 /root 有 .kube 目录,但 /home/MYUSER 没有。
答案1
双引号允许交互式 shell$HOME
在将参数传递给 之前进行扩展sudo bash
。您可以通过将 shell 设置为调试模式来验证这一点:
$ set -x
$ sudo bash -c "echo $HOME"
+ sudo bash -c 'echo /home/steeldriver'
/home/steeldriver
$ set +x
尝试一下
sudo -H -u root bash -c 'echo $HOME'
或者只是
sudo bash -c 'echo $HOME'
因为-H
是当前支持的 Ubuntu 版本中的默认设置。另请参阅: