如果我运行一个命令。
sudo some-command && some-other-command
Run Code Online (Sandbox Code Playgroud)
第二个命令是否sudo也使用特权运行?
s3l*_*lph 120
TL;博士:没有
第一个命令是
sudo some-command
Run Code Online (Sandbox Code Playgroud)
第二个命令是
some-other-command
Run Code Online (Sandbox Code Playgroud)
该命令sudo采用以下命令并以提升的权限执行它。的&&,但是,不属于一个命令,并通过外壳的解释,执行第一命令之前。它告诉 bash 首先执行第一个命令,成功后执行第二个命令。
所以sudo不知道&& some-other command. 当提升的进程终止时,bash 获取其返回值,然后执行另一个命令,该命令同样不知道第一个命令。
这可以很容易地证明:
$ sudo whoami && whoami
root
username
Run Code Online (Sandbox Code Playgroud)
为了达到你想要的效果,你可以启动一个提升的 bash,让它执行两个命令:
$ sudo bash -c 'whoami && whoami'
root
root
Run Code Online (Sandbox Code Playgroud)
所以现在,这两个命令都以 root 身份执行,因为上面描述的整个过程是在一个提升的过程中执行的,即 bash 会话以这个命令开始,完成后立即退出。尽管如此,两人whoami都不知道对方的存在。
这不适合任何目的,但对于这个演示,更简单的方法是简单地做
sudo some-command && sudo some-other-command
Run Code Online (Sandbox Code Playgroud)
Rin*_*ind 20
不。一些这样做的例子是:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
Run Code Online (Sandbox Code Playgroud)
或者如果你想要嵌套命令,你甚至可以这样做:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
Run Code Online (Sandbox Code Playgroud)