Я хотів би знайти еквівалент
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
Різниця у відповіді Amit полягає в тому, що сценарій не вийде, тобто виконує потенційні команди, які можуть слідувати послідовності / циклу. Зауважте, що стан повернення всього циклу завжди буде істинним з моєї пропозиції, це може бути виправлено, якщо це стосується вашого випадку.
Якщо ви хочете забруднити однолінійне рішення, можете створити команду і відправити її в 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 ping статистика --- 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 мс
--- yahoo.com ping статистика --- 1 пакет передано, 1 отримано, 0% втрати пакету, час 0 мс rtt хв / avg / max / mdev = 398,974 / 398,974 / 398,974 / 0,000 мс
cmd && cmd