當前位置: 首頁>>技術教程>>正文


當使用&&和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/zh-tw/article/1302.html,未經允許,請勿轉載。