En los tutoriales y procedimientos a menudo veo comandos combinados. Por ejemplo,
sudo apt-get update && sudo apt-get install pyrenamer
Parece que hay cuatro conectores posibles: &
, &&
, ||
y ;
. Aunque el &
conector es claro para mí (envía un proceso a un segundo plano y deja el terminal disponible), no está claro cuál es la diferencia entre &&
y ;
. Y no lo supe ||
hasta el comentario de Kaya.
Las siguientes preguntas tratan la diferencia entre los dos conectores, pero lo hacen principalmente en los comentarios:
Aquí hay una serie de preguntas relacionadas:
- ¿Cuál es la diferencia entre
;
y&&
? - ¿Cuándo deberías usarlos respectivamente? Sería bueno ver algunos casos de uso: si quiero ejecutar un comando y después de que apague mi computadora, ¿qué conector debo elegir?
- ¿Cuáles son sus ventajas y peligros ? Robie Basak menciona en un comentario a esta respuesta que un comando como
cd /somewhere_else; rm -Rf *
puede tener consecuencias destructivas si el primer elemento en la cadena de comandos falla, por ejemplo. - Si es relevante, ¿de dónde vienen?
command-line
bash
don.joey
fuente
fuente
||
es el mismo que&&
excepto que solo ejecuta el segundo comando si el primero salió con un estado distinto de cero (sin éxito).set -e
detendrá el script en caso de falla como si todos los comandos estuvieran conectados&&
.Respuestas:
Cheatsheet:
fuente
A & B &
,: ejecutar A en segundo plano, luego ejecutar B en segundo plano (independientemente del éxito) y devolver el control al shell. Esto a menudo funciona casi igual que ejecutar ambos procesos al mismo tiempo.(A && B) &
.&&
solo ejecuta el segundo comando si el primero salió con el estado 0 (fue exitoso).;
ejecuta ambos comandos, incluso si el primero sale con un estado distinto de cero.Su ejemplo con
&&
se puede parafrasear de manera equivalente comofuente
;
si el segundo comando no necesita el anterior para tener éxito.El uso
;
ejecutará los comandos independientemente de si el primer comando es exitoso o no.usando el
&&
segundo comando de ejecución solo cuando el primer comando se ejecutó con éxito (estado 0).Ambos se usan en diferentes perspectivas. Como para un proceso más largo, digamos que para una instalación necesita compilarlo e instalarlo. que debiera
make && make install
. Por lo tanto, la instalación se ejecutará solo si tienemake
éxito.Entonces, para los comandos dependientes, debe usar
&&
Wring bash, o comandos con comandos independientes usan
;
Entonces, si desea apagar la computadora, incluso el primer trabajo falló
;
, pero si desea el éxito completo del primer trabajo, inicie el uso de apagado&&
fuente
a ; b
ejecutará b independientemente del estado de salida de a.a && b
ejecutará b solo si a tuvo éxito.Esto es necesario y suficiente para responder a las primeras 3 preguntas. En particular, el 2 es demasiado amplio y no se le puede dar "una" respuesta definitiva: su mejor opción es decidir caso por caso.
En cuanto a la cuarta pregunta: son la sintaxis de Bash .
No hay peligro intrínseco en el uso tampoco. Nuevamente, la definición anterior es suficiente. Implica que escribirá
&&
cuandob
tenga efectosa
no deseados si no tiene éxito. No hay necesidad de más reglas o explicaciones, en mi humilde opinión.fuente
Una muy buena regla de oro. Agregaría que, en algunos casos, usar estos comandos en una subshell tiene sentido cuando queremos considerarlos como una sola unidad o no queremos unir algunos resultados de operaciones con la shell actual.
Ejemplos:
-concatenar la salida de dos comandos:
-entrando en un directorio y ejecutando un comando desde allí sin cambiar el directorio actual del shell:
fuente