Si je lance une commande.
sudo some-command && some-other-command
La deuxième commande est-elle exécutée avec sudo
previlege également?
TL; DR: NO
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 &&
, cependant, n'appartient pas à une commande et est interprété par le shell avant l'exécution de la première commande. Il demande à bash d’exécuter d’abord la première commande et, en cas de succès, la seconde.
Donc, le sudo
ne sait pas à propos de la && some-other command
. Lorsque le processus élevé se termine, bash prend sa valeur de retour, puis exécute l'autre commande, qui à nouveau 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 démarrer un bash élevé et le laisser exécuter les deux commandes:
$ sudo bash -c 'whoami && whoami'
root
root
Alors maintenant, les deux commandes sont exécutées en tant que root, car le processus entier décrit ci-dessus est exécuté dans un processus élevé, c'est-à-dire que la session bash a démarré avec cette commande, qui se termine immédiatement à la fin. Pourtant, les deux whoami
ne se connaissent pas.
Cela ne convient à rien, mais pour cette démonstration, le moyen le plus simple est simplement de faire
sudo some-command && sudo some-other-command
whoami
exemple.Quelques exemples qui font cela sont:
ou si vous voulez des commandes de nid, vous pouvez même faire:
la source
$ sudo -s -- whoami && whoami
donneroot
username
sudo -s -- "whoami && whoami"
semble donner une commande non trouvée, plus ou moins la même chose qu'une commande"whoami && whoami"
. Comment utiliser cette construction avec &&? Je vois que celasudo -s cd ..
ne donne pas d'erreur par opposition àsudo cd ..
.sudo bash <<"EOF"
:! Merci! :-)Non, vous devez écrire sudo deux fois ou faire quelque chose comme
la source
&&
signifie que la commande côté droit (deuxième) ne sera exécutée que si la commande dont le côté inférieur (premier) a abouti, c'est-à-dire que le code de sortie l'$?
est0
.Les deux commandes sont différentes l'une de l'autre et s'exécutent dans leurs propres environnements. La deuxième commande ne s'exécutera donc pas avec des
sudo
privilèges.Cela vous éclaircira:
la source
NON, et ce qui suit était très communément une fois en macro.
Presque tout le monde aurait dû le faire au moins une fois
Il s’agit donc d’une excellente question d’interview "mickey mouse".
Ceci est si facilement testé que la question peut être suspectée d’un exercice de remplissage de statistiques.
la source
Sur la ligne de commande, quand vous voyez
L'intention typique est d'exécuter la commande qui suit le && seulement si la première commande est réussie.
Est-ce que l’autre commande s’exécute aussi en tant que sudo?
absolument non, c'est juste comme écrire deux commandes consécutives, ceci && ne donne aucun privilège ajouté à une commande. C'est juste un séparateur .
Pour prouver cela, prenons un exemple.
J'ai créé deux fichiers fichierA et fichierB. Maintenant, je lance la commande
Je remplace l'utilisateur et le propriétaire du groupe de ces fichiers par un test d'utilisateur et de nom de groupe Maintenant, la première commande devrait être exécutée, et l’autre?
La sortie est:
Donc, la commande n’a pas été exécutée car elle a besoin
sudo
et bien que nous puissions en conclure que && ne remplace pas la secondesudo
la source