当前位置: 首页>>技术教程>>正文


当使用&&和sudo在第一个命令,是第二个命令运行sudo呢?

, ,

问题描述

如果我运行命令。

sudo some-command && some-other-command

第二个命令是否也与sudo一起运行?

最佳解决方法

长话短说:没有


第一个命令是

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

次佳解决方法

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

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。

  • 请注意,当您在第二个版本中使用’或’时,您需要在该命令的命令或参数(即。\’或\“)中转义那些,以便可以非常快速地复杂化。

第三种解决方法

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

sudo bash -c 'foo && bar'

第四种方法

&&表示右侧(第二)命令仅在最小值(第一)命令成功时才运行,即退出代码$?0

这两个命令彼此不同,并且将在它们自己的环境中运行,因此第二个命令将不会运行具有sudo权限。

这会让你清楚:

$ sudo whoami && whoami 
root
foobar

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1302.html,未经允许,请勿转载。