尝试以 root 身份执行命令不会将 $HOME 设置为 /root

尝试以 root 身份执行命令不会将 $HOME 设置为 /root

我试图以 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 版本中的默认设置。另请参阅:

相关内容