¿Cuál es el propósito de "&&" en un comando de shell?

Resuelto Captain asked hace 13 años • 0 respuestas

Hasta donde yo sé, usarlo &después del comando es para ejecutarlo en segundo plano.

Ejemplo de &uso:tar -czf file.tar.gz dirname &

¿Pero qué tal &&? ( ejemplo )

Captain avatar Dec 22 '10 22:12 Captain
Aceptado

Además, también tienes ||cuál es el lógico o, y también ;cuál es solo un separador al que no le importa lo que pasó con el comando antes.

$ false || echo "Oops, fail"
Oops, fail

$ true || echo "Will not be printed"
$  

$ true && echo "Things went well"
Things went well

$ false && echo "Will not be printed"
$

$ false ; echo "This will always run"
This will always run

Algunos detalles sobre esto se pueden encontrar aquí Listas de comandos en el manual de Bash.

plundra avatar Dec 22 '2010 15:12 plundra

&&le permite hacer algo en función de si el comando anterior se completó correctamente; es por eso que tiende a verlo encadenado como do_something && do_something_else_that_depended_on_something.

girasquid avatar Dec 22 '2010 15:12 girasquid

Línea de comando: ¿cuál es el propósito de &&?

En concha, cuando ves

$ command one && command two

la intención es ejecutar el comando que sigue al &&solo si el primer comando tiene éxito. Esto es idiomático de los shells Posix y no solo se encuentra en Bash.

Pretende impedir la ejecución del segundo proceso si el primero falla.

Quizás hayas notado que he usado la palabra "intención", y es por una buena razón. No todos los programas tienen el mismo comportamiento, por lo que para que esto funcione, es necesario comprender qué considera el programa un "fallo" y cómo lo maneja leyendo la documentación y, si es necesario, el código fuente.

Su shell considera un valor de retorno de 0 para verdadero, otros números positivos para falso

Los programas devuelven una señal al salir. Deberían devolver 0 si salen con éxito, o mayor que cero si no lo hacen. Esto permite una cantidad limitada de comunicación entre procesos.

Se &&hace referencia a AND_IFen la gramática del shell posix , que es parte de una and_orlista de comandos, que también incluye el ||con OR_IFsemántica similar.

Símbolos gramaticales, citados de la documentación:

%token  AND_IF    OR_IF    DSEMI
/*      '&&'      '||'     ';;'    */

Y la Gramática (también citada de la documentación), que muestra que cualquier número de AND_IFs ( &&) y/o OR_IFs ( ||) se pueden unir (como and_orse define de forma recursiva):

and_or           :                         pipeline
                 | and_or AND_IF linebreak pipeline
                 | and_or OR_IF  linebreak pipeline

Ambos operadores tienen la misma precedencia y se evalúan de izquierda a derecha (son asociativos por izquierda). Como dicen los médicos:

Una AND-ORlista es una secuencia de uno o más canales separados por los operadores "&&"y "||".

Una lista es una secuencia de una o más listas AND-OR separadas por operadores ';'y '&'opcionalmente terminadas por ';', '&'o .

Los operadores "&&"y "||"tendrán igual precedencia y serán evaluados con asociatividad izquierda. Por ejemplo, los dos comandos siguientes escriben únicamente barra en la salida estándar:

$ false && echo foo || echo bar
$ true || echo foo && echo bar
  1. En el primer caso, el false es un comando que sale con el estado de1

    $ false
    $ echo $?
    1
    

    lo que significa echo fooque no funciona (es decir, que está en cortocircuito echo foo). echo barLuego se ejecuta el comando .

  2. En el segundo caso, verdadero sale con un código de0

    $ true
    $ echo $?
    0
    

    y por tanto echo foono se ejecuta, entonces echo barse ejecuta.

Russia Must Remove Putin avatar May 28 '2015 13:05 Russia Must Remove Putin