Si ejecuto un comando.
sudo some-command && some-other-command
¿El segundo comando también se ejecuta con sudo
previlege?
Si ejecuto un comando.
sudo some-command && some-other-command
¿El segundo comando también se ejecuta con sudo
previlege?
Respuestas:
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
No. Algunos ejemplos que hacen esto son:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
o si quieres comandos de nido, incluso puedes hacer:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ 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 que sudo -s cd ..
no da ningún error en comparación con sudo cd ..
.
sudo bash <<"EOF"
:! ¡Gracias! :-)
No, debes escribir sudo dos veces o hacer algo como
sudo bash -c 'foo && bar'
&&
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 $?
es 0
.
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:
$ sudo whoami && whoami
root
foobar
NO, y lo siguiente fue una vez muy comúnmente macro'd.
sudo reboot && exit
Casi todos deberían haber hecho esto al menos una vez
sudo apt-get update && sudo apt-get upgrade
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.
En la línea de comando, cuando veas
$ command one && command two
la intención típica es ejecutar el comando que sigue a && solo si el primer comando es exitoso.
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.
touch fileA fileB
Creé dos archivos archivo A y archivo B. Ahora ejecutaré el comando
sudo chown test:test fileA && chown test:test fileB
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:
chown: changing ownership of `fileB': Operation not permitted
Por lo tanto, el comando no se ejecutó ya que necesita sudo
y, aunque podemos concluir que && no es un reemplazo del segundosudo
whoami
ejemplo.