Я хотел бы найти эквивалент
cmd 1 && cmd 2 && ... && cmd 20
но с командами, выраженными внутри for
цикла, как
for i in {1..20}
do
cmd $i
done
Что бы вы предложили изменить во втором выражении, чтобы найти эквивалент первого?
Я хотел бы найти эквивалент
cmd 1 && cmd 2 && ... && cmd 20
но с командами, выраженными внутри for
цикла, как
for i in {1..20}
do
cmd $i
done
Что бы вы предложили изменить во втором выражении, чтобы найти эквивалент первого?
Ответы:
Эквивалентом вашей исходной последовательности будет:
for i in {1..20}
do
cmd $i || break
done
Разница с ответом Амита заключается в том, что скрипт не будет завершен, т.е. будет выполнять потенциальные команды, которые могут следовать последовательности / циклу. Обратите внимание, что возвращаемое состояние всего цикла всегда будет истинным с моим предложением, это может быть исправлено, если это уместно в вашем случае.
Если вам нужно грязное однострочное решение, вы можете создать команду и отправить ее в bash.
echo "cmd "{1..20}" &&" : | bash
Вы можете выйти из цикла, если один из них потерпел неудачу
for i in {1..55}; do
if ! cmd $i; then
exit 1
fi
done
break
Там не законно? Я почти уверен, что if
заявление не вмешивается ..
Вот как я выполняю свои задачи в терминале, не используя &&
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 мс
--- статистика пинга google.com --- 1 отправлено пакетов, 1 получено, потеря пакетов 0%, время 0 мс rtt мин / avg / max / 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 мин / avg / max / mdev = 398,974 / 398,974 / 398,974 / 0,000 мс
cmd && cmd