Como substituo AND (&&) em um loop for?

Como substituo AND (&&) em um loop for?

Eu gostaria de encontrar um equivalente de

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

mas com comandos expressos dentro de um forloop como

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

O que você sugeriria mudar na segunda expressão para encontrar um equivalente da primeira?

Responder1

O equivalente à sua sequência original seria:

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

A diferença com a resposta de Amit é que o script não será encerrado, ou seja, executará comandos potenciais que podem seguir a sequência/loop. Observe que o status de retorno de todo o loop sempre será verdadeiro com minha sugestão; isso pode ser corrigido se for relevante no seu caso.

Responder2

Se você quiser uma solução suja de uma linha, poderá criar um comando e enviá-lo para o bash.

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

Responder3

Você pode sair do loop se um deles falhar

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

Responder4

É assim que executo minhas tarefas no terminal sem usar&&

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

Semelhante a você tem que colocar este comando em um script

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

Ambos dando a mesma saída para mim

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

--- estatísticas de ping do google.com --- 1 pacote transmitido, 1 recebido, 0% de perda de pacote, tempo 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 dados. 64 bytes de yahoo.com (98.138.253.109): icmp_seq=1 ttl=51 tempo=398 ms

--- estatísticas de ping do yahoo.com --- 1 pacote transmitido, 1 recebido, 0% de perda de pacote, tempo 0 ms rtt min/avg/max/mdev = 398,974/398,974/398,974/0,000 ms

informação relacionada