Si ejecuto un comando.
sudo some-command && some-other-command
¿El segundo comando también se ejecuta con sudo
previlege?
TL; DR: NO
El primer comando es
sudo some-command
El segundo comando es
some-other-command
El comando sudo
toma el siguiente comando y lo ejecuta con privilegios elevados. Sin &&
embargo, no pertenece a un comando y el intérprete lo interpreta antes de ejecutar el primer comando. Le dice a bash que primero ejecute el primer comando y, en caso de éxito, el segundo.
Entonces el sudo
no sabe sobre el && some-other command
. Cuando finaliza el proceso elevado, bash toma su valor de retorno y luego ejecuta el otro comando, que nuevamente no conoce el primero.
Esto se puede demostrar fácilmente:
$ sudo whoami && whoami
root
username
Para alcanzar lo que desea, puede iniciar un bash elevado y dejar que ejecute ambos comandos:
$ sudo bash -c 'whoami && whoami'
root
root
Entonces, ambos comandos se ejecutan como root, ya que todo el proceso descrito anteriormente se ejecuta en un proceso elevado, es decir, la sesión bash comenzó con este comando, que se cierra inmediatamente después de finalizar. Aún así, ambos whoami
no saben de la existencia del otro.
Esto no se adapta a ningún propósito, pero para esta demostración, la forma más fácil es simplemente hacer
sudo some-command && sudo some-other-command
whoami
ejemplo.No. Algunos ejemplos que hacen esto son:
o si quieres comandos de nido, incluso puedes hacer:
fuente
$ sudo -s -- whoami && whoami
daroot
username
sudo -s -- "whoami && whoami"
parece dar el comando no encontrado, más o menos lo mismo que el comando"whoami && whoami"
. ¿Cómo usar esta construcción con &&? Veo quesudo -s cd ..
no da ningún error en comparación consudo cd ..
.sudo bash <<"EOF"
:! ¡Gracias! :-)No, debes escribir sudo dos veces o hacer algo como
fuente
&&
significa que el comando del lado derecho (segundo) solo se ejecutará si el comando del lado anterior (primero) tiene éxito, es decir, el código de salida lo$?
es0
.Los dos comandos son diferentes entre sí y se ejecutarán en sus propios entornos, por lo que el segundo comando no se ejecutará con
sudo
privilegios.Esto te dejará claro:
fuente
NO, y lo siguiente fue una vez muy comúnmente macro'd.
Casi todos deberían haber hecho esto al menos una vez
Por lo tanto, es una gran pregunta de entrevista "mickey mouse".
Esto se prueba tan fácilmente que la pregunta puede sospecharse en un ejercicio de relleno de estadísticas.
fuente
En la línea de comando, cuando veas
la intención típica es ejecutar el comando que sigue a && solo si el primer comando es exitoso.
¿El otro comando también se ejecuta como sudo?
absolutamente no, esto es solo como escribir dos comandos consecutivos, esto && no otorga ningún privilegio adicional a un comando. Es solo un separador .
Para demostrarlo, tomemos un ejemplo.
Creé dos archivos archivo A y archivo B. Ahora ejecutaré el comando
Estoy cambiando el usuario y el propietario del grupo de estos archivos a prueba de nombre de usuario y grupo. Ahora el primer comando debería ejecutarse, ¿y el otro?
El resultado es:
Por lo tanto, el comando no se ejecutó ya que necesita
sudo
y, aunque podemos concluir que && no es un reemplazo del segundosudo
fuente