Answers:
TL; DR:否
第一个命令是
sudo some-command
第二个命令是
some-other-command
该命令sudo
采用以下命令并以提升的特权执行它。的&&
,但是,不属于一个命令,并通过外壳的解释,执行第一命令之前。它告诉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
$ sudo -s -- whoami && whoami
给出root
username
sudo -s -- "whoami && whoami"
似乎给出了未找到的命令,与command大致相同"whoami && whoami"
。如何与&&一起使用此构造?我看到 sudo -s cd ..
与相对没有错误sudo cd ..
。
sudo bash <<"EOF"
!谢谢!:-)
在命令行上,当您看到
$ command one && command two
通常的意图是仅在第一个命令成功时才执行&&后面的命令。
绝对不行,这就像编写两个连续的命令一样,此&&不会给命令增加任何特权。这只是一个分隔符。
为了证明这一点,让我们举一个例子。
touch fileA fileB
我创建了两个文件fileA和fileB。现在我将运行命令
sudo chown test:test fileA && chown test:test fileB
我正在将这些文件的用户和组所有者更改为用户和组名称测试。现在,第一个命令应该运行,而另一个命令应该如何运行?
输出为:
chown: changing ownership of `fileB': Operation not permitted
因此该命令由于需要sudo
而没有运行,尽管我们可以得出结论,&&不能替代第二个sudo
whoami
范例为+1 。