在第一个命令上使用 && 和 sudo 时,第二个命令是否也以 sudo 形式运行?

在第一个命令上使用 && 和 sudo 时,第二个命令是否也以 sudo 形式运行?

如果我运行一个命令。

sudo some-command && some-other-command

第二条命令是否也以特权运行sudo

答案1

总结:


第一个命令是

sudo some-command

第二条命令是

some-other-command

该命令sudo接受以下命令并以提升的权限执行它。&&但是, 不属于命令,在执行第一个命令之前由 shell 解释。它告诉 bash 首先执行第一个命令,如果成功则执行第二个命令。

因此sudo不知道&& some-other command。当提升的进程终止时,bash 会获取其返回值,然后执行其他命令,而该命令同样不知道第一个命令。

这可以很容易地证明:

$ sudo whoami && whoami
root
username

为了达到您想要的效果,您可以启动提升的 bash,并让它执行两个命令:

$ sudo bash -c 'whoami && whoami'
root
root

因此现在,两个命令都以 root 身份执行,因为上面描述的整个过程是在提升的进程中执行的,即以此命令启动的 bash 会话,完成后立即退出。不过,这两个命令whoami都不知道对方的存在。

这不适合任何目的,但对于这个演示,更简单的方法就是简单地做

sudo some-command && sudo some-other-command

答案2

不。以下是一些这样做的例子:

sudo some-command && sudo some-other-command 
sudo sh -c "some-command && some-other-command"

或者如果你想要嵌套命令你甚至可以这样做:

sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
    some-command2
    some-other-command2
EOF2
EOF
  • 第二个使用另一个 shell。
  • 请注意,当您在第二版中使用'或“时,您需要在命令或该命令的参数中对其进行转义(即\'或\”),因此很快就会变得复杂。

答案3

不,你要么必须写两次 sudo,要么做类似的事情

sudo bash -c 'foo && bar'

答案4

不,以下曾经是非常常见的宏。

sudo reboot && exit

几乎每个人都应该至少这样做一次

sudo apt-get update && sudo apt-get upgrade

因此,这是一个很棒的“米老鼠”面试问题。

这很容易测试,以至于该问题可能被怀疑为统计填充练习。

相关内容