Я хотел бы многократно перебирать, чередовать и / или перебирать несколько команд; в виде узора или петли. Желаемый конечный результат можно представить как нечто совсем не похожее на часы
.
Я экспериментировал с вариациями этой базовой формулы; но что-то отсутствует, неправильно или нет:
for x in {1..60};
do
<first command> &&
sleep 1 &&
<second command>;
done
Я думаю, это просто повторение ( do
ing) <первая команда> &&
шестьдесят раз, а затем все последующие операции только один раз , вроде нормально. Я пробовал несколько разных вещей; например, используя {
фигурные скобки }
, '
кавычки '
, "
кавычки "
, и так далее; в попытке сгруппировать команды вместе, но безуспешно.
Все в порядке, думаю, я понял.
Думаю, мне просто нужно добавить еще один && sleep 1
между <вторая команда>
и ; сделано
.
Примерно так:
for x in {1..60};
do
<first command> &&
sleep 1 &&
<second command> &&
sleep 1;
done
Это также можно сделать в bash или zsh в режиме emacs с помощью control+o:
$ set -o emacs
$ echo a
a
$ echo b
b
$ echo c
c
Затем используйте навигацию по истории, чтобы добраться до команды echo a
(или соответствующей), затем повторите control+o несколько раз. Команды, начиная с той, по которой вы перешли к самой последней, должны повторяться и зацикливаться на каждом control+o.
Один из простых способов сделать это - поместить каждую команду в элемент массива:
commandlist=('echo "hello"' 'echo "howdy"')
И затем перебрать его:
for x in {1..10}; do
index=$((x%2)) # % takes the modulus (or remainder) of integer division
${foo[$index]}
sleep 1
done
$ {foo [0]}
заменяется на echo " hello "
, который затем выполняется.
Это работает для меня:
for x in {1..60};
do echo "1" &&
sleep 1 &&
echo "3";
done
Это также работает для меня:
for x in {1..60};
do echo "1";
sleep 1;
echo "3";
done
Каковы ваши другие две команды?