¿Cómo reemplazo AND (&&) en un bucle for?

¿Cómo reemplazo AND (&&) en un bucle for?

Me gustaría encontrar un equivalente de

cmd 1 && cmd 2 && ... && cmd 20

pero con comandos expresados ​​dentro de un forbucle como

for i in {1..20}
do
   cmd $i
done

¿Qué sugerirías cambiar en la segunda expresión para encontrar un equivalente de la primera?

Respuesta1

El equivalente a su secuencia original sería:

for i in {1..20}
do
   cmd $i || break
done

La diferencia con la respuesta de Amit es que el script no se cerrará, es decir, ejecutará comandos potenciales que podrían seguir la secuencia/bucle. Tenga en cuenta que, según mi sugerencia, el estado de retorno de todo el bucle siempre será verdadero; esto podría solucionarse si es relevante en su caso.

Respuesta2

Si desea una solución sucia de una sola línea, puede crear un comando y enviarlo a bash.

echo "cmd "{1..20}" &&" : | bash

Respuesta3

Puedes salir del circuito si uno de ellos falla

for i in {1..55}; do
    if ! cmd $i; then
        exit 1
    fi
done

Respuesta4

Así es como ejecuto mis tareas en la terminal sin usar&&

 for i in google.com yahoo.com;do ping -c1 $i;echo $i;done

De manera similar, tienes que poner este comando en un script.

 for i in google.com yahoo.com
    do echo $i;ping -c1 $i;
  done

Ambos me dan el mismo resultado.

google.com PING google.com (172.217.26.174) 56(84) bytes de datos. 64 bytes de google.com (172.217.26.174): icmp_seq=1 ttl=56 tiempo=259 ms

--- Estadísticas de ping de google.com --- 1 paquete transmitido, 1 recibido, 0 % de pérdida de paquete, tiempo 0 ms rtt min/avg/max/mdev = 259.794/259.794/259.794/0.000 ms yahoo.com PING yahoo.com ( 98.138.253.109) 56(84) bytes de datos. 64 bytes de yahoo.com (98.138.253.109): icmp_seq=1 ttl=51 tiempo=398 ms

--- estadísticas de ping de yahoo.com --- 1 paquete transmitido, 1 recibido, 0% de pérdida de paquete, tiempo 0ms rtt min/avg/max/mdev = 398.974/398.974/398.974/0.000 ms

información relacionada