Lorsque vous utilisez && et sudo sur la première commande, la deuxième commande est-elle également exécutée en tant que sudo?

55

Si je lance une commande.

sudo some-command && some-other-command

La deuxième commande exécutée avec sudo previlege également?

    
posée user974407 10.06.2015 - 13:32
la source

6 réponses

103

TL; DR: NON

La première commande est

sudo some-command

La deuxième commande est

some-other-command

La commande sudo prend la commande suivante et l'exécute avec des privilèges élevés. Le && n'appartient cependant pas à une commande et est interprété par le shell avant d'exécuter la première commande. Il indique à bash de commencer par exécuter la première commande et, en cas de succès, la deuxième.

Le sudo ne connaît donc pas le && some-other command . Lorsque le processus élevé se termine, bash prend sa valeur de retour, puis exécute l'autre commande, qui à son tour ne connaît pas la première.

Cela peut être démontré facilement:

$ sudo whoami && whoami
root
username

Pour atteindre ce que vous voulez, vous pouvez lancer un bash élevé et le laisser exécuter les deux commandes:

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

Maintenant, les deux commandes sont exécutées en tant que root, car tout le processus décrit ci-dessus est exécuté dans un processus élevé, c’est-à-dire que la session bash a commencé avec cette commande, qui se termine immédiatement. Pourtant, les deux whoami s ne se connaissent pas.

Cela ne convient à aucun objectif, mais pour cette démonstration, le moyen le plus simple est de faire simplement

sudo some-command && sudo some-other-command
    
réponse donnée s3lph 10.06.2015 - 13:44
la source
18

Non. Voici quelques exemples:

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

ou si vous voulez des commandes d’imbrication, vous pouvez même faire:

sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
    some-command2
    some-other-command2
EOF2
EOF
  • Le 2ème utilise un autre shell.
  • N'oubliez pas que lorsque vous utilisez "ou" dans la deuxième version, vous devez échapper à celles des commandes ou des paramètres de cette commande (c.-à-d.
réponse donnée Rinzwind 10.06.2015 - 13:41
la source
4

Non, vous devez soit écrire deux fois sudo, soit faire quelque chose comme

sudo bash -c 'foo && bar'
    
réponse donnée davidbaumann 10.06.2015 - 13:41
la source
2

&& signifie que la commande côté droit (seconde) ne s'exécutera que si la première commande (la première) est réussie, c'est-à-dire que le code de sortie $? est 0 .

Les deux commandes sont différentes les unes des autres et s'exécuteront dans leurs propres environnements afin que la deuxième commande ne s'exécute pas avec le privilège sudo .

Cela vous permettra de clarifier:

$ sudo whoami && whoami 
root
foobar
    
réponse donnée heemayl 10.06.2015 - 13:49
la source
0

Sur la ligne de commande, quand vous voyez

$ command one && command two

L'intention typique est d'exécuter la commande qui suit le & amp; & amp; uniquement si la première commande est réussie.

L’autre commande s'exécute-t-elle aussi comme sudo?

absolument non, c'est juste comme écrire deux commandes consécutives, ceci & amp; & amp; ne donne aucun privilège supplémentaire à une commande. Ce n'est qu'un séparateur .

Prouver que prenons un exemple.

touch fileA fileB 

J'ai créé deux fichiers fileA et fileB. Maintenant, je vais exécuter la commande

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

Je change le propriétaire de l'utilisateur et du groupe de ces fichiers en test de nom d'utilisateur et de groupe. Maintenant, la première commande doit être exécutée pendant que l’autre?

La sortie est la suivante:

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

La commande n'a donc pas été exécutée car elle nécessite sudo et nous pouvons en conclure que & amp; & amp; ne remplace pas le second sudo

    
réponse donnée Maythux 10.06.2015 - 13:42
la source
0

NON, et ce qui suit était autrefois très communément appelé macro.

sudo reboot && exit

À peu près tout le monde aurait dû le faire au moins une fois

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

Il s’agit donc d’une excellente question d’interview pour "mickey mouse".

Cela est si facile à tester que la question peut être suspectée à un exercice de remplissage de statistiques.

    
réponse donnée mckenzm 13.06.2015 - 20:19
la source

Lire d'autres questions sur les étiquettes