En bash, a veces quiero ejecutar varios comandos en serie y no quiero esperar a que terminen antes de escribir los nuevos. Entonces hago algo como esto:
cmd1; cmd2; cmd3
Desafortunadamente, uno de los comandos puede fallar. En ese caso, me gustaría parar. ¿Hay una manera fácil de hacer esto, pero hacer que solo siga ejecutando los comandos si el comando anterior tenía un código de salida 0?
command-line
bash
metáfora pitónica
fuente
fuente

Respuestas:
Usar
&&operador,En shellscripting,
&&y los||operadores se modelan después de la implementación optimizada de operadores lógicos en C.&&significa operador AND, y||significa OR. Unix está estrechamente relacionado con C, y en C, el segundo operando de operadores lógicos no se evalúa si el resultado ya se conoce del primer operando. Por ejemplo,"false && x"esfalsepara cualquierx, por lo que no hay necesidad de evaluarx(especialmente si sextrata de una llamada de función); igualmente para"true || x". Esto también se llama semántica de cortocircuito .Y en Unix, es tradicional interpretar los valores de retorno de los comandos como valores de verdad de "finalización exitosa": el código de salida 0 significa
true(éxito), no cero significafalse(falla). Entonces, cuando el primer comando encmd1 && cmd2retorna"false"(estado de salida distinto de cero, que indica falla), se conoce el estado del comando compuesto: falla. Entonces, la interpretación general decmd1 && cmd2puede ser: "ejecutarcmd1, Y ENTONCES, si no fallacmd2". Que es lo que básicamente quieres en tu pregunta.De manera similar con OR:
cmd1 || cmd2puede interpretarse como "ejecutarcmd1, O SI fallacmd2".Protip: para cadenas más largas de
&&, considere ponerset -een su script. Básicamente cambia el punto;y coma en&&, con un par de casos especiales.fuente
||A || Bes lo mismo que el [cortocircuitando] lógica AOB .A || Bes el éxito cuandoAfue éxito o cuandoAfue fracaso peroBfue éxito ; yA || Bes fracaso cuandoAera fracaso yBfuefailure. Del mismo modo&&, sigue lógicamente AND.;(o nueva línea) por defecto.set -ese convertirá;en&&, más o menos hablando.set +e[el valor predeterminado] se convierteA; Ben lo que usted dice: ejecutarA, luego no importa qué ejecuteB."Encadenando Comandos y Agrupándolos"
pings, solo si no tiene éxito, ejecuta el grupo encadenado de comandos entre paréntesis.
Atención:
La lista debe terminarse con un ";".
¡Debe haber espacios en blanco entre paréntesis y los comandos agrupados!
fuente
Simplemente con el
&&operador. Por ejemplo:Si uno de los comandos falla (devuelve un valor de salida distinto de 0), los otros comandos no se ejecutarán.
fuente