%20%D0%B2%20%D1%86%D0%B8%D0%BA%D0%BB%D0%B5%20for%3F.png)
Я хотел бы найти эквивалент
cmd 1 && cmd 2 && ... && cmd 20
но с командами, выраженными внутри for
цикла, например
for i in {1..20}
do
cmd $i
done
Что бы вы предложили изменить во втором выражении, чтобы найти эквивалент первого?
решение1
Эквивалент вашей исходной последовательности будет следующим:
for i in {1..20}
do
cmd $i || break
done
Разница с ответом Амита в том, что скрипт не выйдет, т.е. выполнит потенциальные команды, которые могут следовать за последовательностью/циклом. Обратите внимание, что статус возврата всего цикла всегда будет истинным с моим предложением, это может быть исправлено, если это актуально в вашем случае.
решение2
Если вам нужно грязное однострочное решение, вы можете создать команду и отправить ее в bash.
echo "cmd "{1..20}" &&" : | bash
решение3
Вы можете выйти из цикла, если один из них потерпел неудачу
for i in {1..55}; do
if ! cmd $i; then
exit 1
fi
done
решение4
Вот как я выполняю свои задачи в терминале без использования&&
for i in google.com yahoo.com;do ping -c1 $i;echo $i;done
Аналогично, вам нужно поместить эту команду в скрипт
for i in google.com yahoo.com
do echo $i;ping -c1 $i;
done
Оба дают мне одинаковый результат
google.com PING google.com (172.217.26.174) 56(84) байт данных. 64 байта от google.com (172.217.26.174): icmp_seq=1 ttl=56 время=259 мс
--- статистика ping google.com --- 1 пакет передан, 1 получен, 0% потери пакетов, время 0 мс rtt мин/ср/макс/mdev = 259,794/259,794/259,794/0,000 мс yahoo.com PING yahoo.com (98.138.253.109) 56(84) байт данных. 64 байта с yahoo.com (98.138.253.109): icmp_seq=1 ttl=51 время=398 мс
--- статистика ping yahoo.com --- 1 пакет передан, 1 получен, 0% потерь пакетов, время 0 мс rtt мин/ср/макс/mdev = 398,974/398,974/398,974/0,000 мс