Se eseguo un comando.
sudo some-command && some-other-command
Anche il secondo comando viene eseguito con sudo
previlege?
Se eseguo un comando.
sudo some-command && some-other-command
Anche il secondo comando viene eseguito con sudo
previlege?
Risposte:
TL; DR: NO
Il primo comando è
sudo some-command
Il secondo comando è
some-other-command
Il comando sudo
accetta 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 sudo
non 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 whoami
non 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 && whoami
dà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 sudo
privilegio.
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 sudo
e sebbene possiamo concludere che && non è un sostituto del secondosudo
whoami
esempio.