如果我运行一个命令。
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
因此,这是一个很棒的“米老鼠”面试问题。
这很容易测试,以至于该问题可能被怀疑为统计填充练习。