Quando si usa && e sudo sul primo comando, il secondo comando viene eseguito anche come sudo?

55

Se eseguo un comando.

sudo some-command && some-other-command

Anche il secondo comando viene eseguito con sudo previlege?

    
posta user974407 10.06.2015 - 13:32

6 risposte

103

TL; DR: NO

Il primo comando è

sudo some-command

Il secondo comando è

some-other-command

Il comando sudo prende il seguente comando e lo esegue con privilegi elevati. Il && , tuttavia, non appartiene ad un comando ed è interpretato dalla shell, prima di eseguire il primo comando. Indica a bash di eseguire prima il primo comando e in caso di successo il secondo.

Quindi sudo non sa di && some-other command . Quando il processo elevato termina, bash prende il suo valore di ritorno, quindi esegue l'altro comando, che ancora non conosce il primo.

Questo può essere dimostrato facilmente:

$ sudo whoami && whoami
root
username

Per raggiungere ciò che desideri, puoi iniziare una bash elevata e lasciare che esegua entrambi i comandi:

$ sudo bash -c 'whoami && whoami'
root
root

Così ora, entrambi i comandi vengono eseguiti come root, poiché l'intero processo descritto sopra viene eseguito in un processo elevato, vale a dire la sessione bash iniziata con questo comando, che termina immediatamente dopo aver terminato. Tuttavia, entrambi whoami s non si conoscono l'uno con l'altro.

Questo non è adatto a nessuno scopo ma per questa dimostrazione, il modo più semplice è semplicemente fare

sudo some-command && sudo some-other-command
    
risposta data s3lph 10.06.2015 - 13:44
18

No. Alcuni esempi che lo fanno sono:

sudo some-command && sudo some-other-command 
sudo sh -c "some-command && some-other-command"

o se vuoi comandi di nidificazione puoi anche fare:

sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
    some-command2
    some-other-command2
EOF2
EOF
  • Il secondo utilizza un'altra shell.
  • Ricorda che quando usi "o" nella 2a versione devi sfuggire a quelli nei comandi o nei parametri di quel comando (ad es. \ 'o \ ") in modo che diventi complesso molto rapidamente.
risposta data Rinzwind 10.06.2015 - 13:41
4

No, o devi scrivere sudo due volte, o fare qualcosa di simile

sudo bash -c 'foo && bar'
    
risposta data davidbaumann 10.06.2015 - 13:41
2

&& significa che il comando (secondo) lato destro verrà eseguito solo se il comando lest lato (first) ha esito positivo, ad esempio il codice di uscita $? è 0 .

I due comandi sono diversi tra loro e verranno eseguiti nei propri ambienti, quindi il secondo comando non verrà eseguito con sudo privilegio.

Questo ti renderà chiaro:

$ sudo whoami && whoami 
root
foobar
    
risposta data heemayl 10.06.2015 - 13:49
0

Sulla riga di comando, quando vedi

$ command one && command two

l'intento tipico è di eseguire il comando che segue il & amp; & amp; solo se il primo comando ha successo.

Anche l'altro comando viene eseguito come sudo?

assolutamente no, questo è proprio come scrivere due comandi consecutivi, questo & amp; non dà alcun privilegio aggiunto a un comando. È solo un separatore .

Per dimostrare che facciamo un esempio.

touch fileA fileB 

Ho creato due file fileA e fileB. Ora eseguirò il comando

sudo chown test:test fileA && chown test:test fileB

Sto cambiando utente e proprietario del gruppo di questi file per il test del nome utente e del gruppo. Ora il primo comando dovrebbe essere eseguito mentre per quanto riguarda l'altro?

L'output è:

chown: changing ownership of 'fileB': Operation not permitted

Quindi il comando non è stato eseguito poiché ha bisogno di sudo e sebbene possiamo concludere che & amp; & amp; non è una sostituzione del secondo sudo

    
risposta data Maythux 10.06.2015 - 13:42
0

NO, e la seguente era una volta molto comunemente macro.

sudo reboot && exit

Quasi tutti avrebbero dovuto farlo almeno una volta

sudo apt-get update && sudo apt-get upgrade

Quindi è una grande domanda per intervistare "topolino".

È così facile testare che la domanda potrebbe essere sospettata per un esercizio di riempimento statistico.

    
risposta data mckenzm 13.06.2015 - 20:19

Leggi altre domande sui tag