Se eseguo un comando.
sudo some-command && some-other-command
Anche il secondo comando viene eseguito con sudoprevilege?
Se eseguo un comando.
sudo some-command && some-other-command
Anche il secondo comando viene eseguito con sudoprevilege?
Risposte:
TL; DR: NO
Il primo comando è
sudo some-command
Il secondo comando è
some-other-command
Il comando sudoaccetta il seguente comando ed esegue con privilegi elevati. La &&, tuttavia, non appartiene a un comando e viene interpretato dalla shell, prima di eseguire il primo comando. Dice a bash di eseguire prima il primo comando e, in caso di successo, il secondo.
Quindi il sudonon sa del && some-other command. Quando termina il processo elevato, bash prende il suo valore di ritorno, quindi esegue l'altro comando, che di nuovo non conosce il primo.
Questo può essere dimostrato facilmente:
$ sudo whoami && whoami
root
username
Per raggiungere ciò che desideri, puoi avviare una bash elevata e lasciar eseguire entrambi i comandi:
$ sudo bash -c 'whoami && whoami'
root
root
Quindi ora entrambi i comandi vengono eseguiti come root, poiché l'intero processo sopra descritto viene eseguito in un processo elevato, ovvero la sessione bash è iniziata con questo comando, che termina immediatamente dopo aver terminato. Tuttavia, entrambi whoaminon conoscono l'esistenza degli altri.
Questo non soddisfa alcuno scopo, ma per questa dimostrazione, il modo più semplice è semplicemente farlo
sudo some-command && sudo some-other-command
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 nest puoi anche fare:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoamidàroot username
sudo -s -- "whoami && whoami"sembra dare il comando non trovato, più o meno lo stesso del comando "whoami && whoami". Come usare questa costruzione con &&? Vedo che sudo -s cd ..non dà alcun errore al contrario sudo cd ...
sudo bash <<"EOF":! Grazie! :-)
No, o devi scrivere sudo due volte o fare qualcosa del genere
sudo bash -c 'foo && bar'
&&significa che il comando di destra lati (secondo) verrà eseguito solo solo se il timore lati comando (prima) è riuscito cioè codice di uscita $?è 0.
I due comandi sono diversi l'uno dall'altro e verranno eseguiti nei rispettivi ambienti, quindi il secondo comando non verrà eseguito con sudoprivilegio.
Questo ti chiarirà:
$ sudo whoami && whoami
root
foobar
NO, e una volta molto comunemente era macro.
sudo reboot && exit
Quasi tutti avrebbero dovuto farlo almeno una volta
sudo apt-get update && sudo apt-get upgrade
Quindi è un'ottima domanda per l'intervista a "Topolino".
Questo è così facilmente testato che la domanda può essere sospettata di un esercizio di riempimento stat.
Sulla riga di comando, quando vedi
$ command one && command two
l'intento tipico è quello di eseguire il comando che segue && solo se il primo comando ha esito positivo.
assolutamente no, questo è proprio come scrivere due comandi consecutivi, questo && non dà alcun privilegio aggiunto a un comando. È solo un separatore .
Per dimostrarlo, 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 il proprietario dell'utente e del gruppo di questi file in 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é è necessario sudoe sebbene possiamo concludere che && non è un sostituto del secondosudo
whoamiesempio.