73 votes

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

Si je lance une commande.

sudo some-command && some-other-command

Est-ce que la deuxième commande est exécutée avec sudo Prédominance aussi ?

124voto

s3lph Points 13389

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 site && n'appartient cependant pas à une commande et est interprétée par le Shell, avant l'exécution de la première commande. Il indique à bash d'exécuter d'abord la première commande, et en cas de succès la seconde.

Ainsi, le sudo n'est pas au courant de la && some-other command . Lorsque le processus élevé se termine, bash prend sa valeur de retour, puis exécute l'autre commande, qui ignore encore une fois l'existence de la première.

Cela peut être démontré facilement :

$ sudo whoami && whoami
root
username

Pour arriver à ce que vous voulez, vous pouvez démarrer un bash élevé, et le laisser exécuter les deux commandes :

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

Donc 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 la session bash démarrée avec cette commande, qui sort immédiatement après avoir terminé. Pourtant, les deux whoami ne connaissent pas l'existence des autres.

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

sudo some-command && sudo some-other-command

20voto

Rinzwind Points 270388

Non. Voici quelques exemples qui le font :

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

ou si vous voulez des commandes de nidification, 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 les échapper dans les commandes ou les paramètres de cette commande (par exemple, \' ou \"), ce qui peut rapidement devenir complexe.

4voto

davidbaumann Points 1780

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

sudo bash -c 'foo && bar'

2voto

heemayl Points 85741

&& signifie que la commande de droite (seconde) ne sera exécutée que si la commande de gauche (première) réussit, c'est-à-dire si le code de sortie $? es 0 .

Les deux commandes sont différentes l'une de l'autre et s'exécuteront dans leurs propres environnements, de sorte que la deuxième commande ne s'exécutera pas en ayant sudo privilège.

Cela vous rendra plus clair :

$ sudo whoami && whoami 
root
foobar

1voto

mckenzm Points 345

NON, et ce qui suit était autrefois une macro très courante.

sudo reboot && exit

Presque tout le monde aurait dû faire ça au moins une fois

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

C'est donc une excellente question d'entretien "mickey mouse".

Cela est si facile à vérifier que la question peut être soupçonnée d'être un exercice de remplissage de statistiques.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X