У меня возникают проблемы с правильным сочетанием точек с запятой и / или фигурных скобок. Я хотел бы сделать это, но в качестве одной строки из командной строки:
while [ 1 ]
do
foo
sleep 2
done
bash
loops
while-loop
Брайан Дикон
источник
источник
Ответы:
Кстати, если вы наберете его как многострочное (как вы показываете) в командной строке, а затем вызовете историю со стрелкой вверх, вы получите ее в одной строке, правильно пунктуированной.
источник
cmdhist
опцию, если вы используете bash?while true; do sh /Users/myuser/bin/vpn ; done
Также возможно использовать команду сна в состоянии while. Делать однострочник более чистым imho.
источник
while echo thinking ; do sleep 2 ; done
Конечно, если команда [while] терпит неудачу, цикл завершается, так что вам придется это сделать,while echo thinking || true ; do sleep 2 ; done
но тогда вы вернетесь кwhile true ; ...
Двоеточие всегда "верно"
источник
: [arguments]
Нет эффекта; команда не делает ничего, кроме расширения аргументов и выполнения любых указанных перенаправлений. Возвращается нулевой код выхода.Вы можете использовать точки с запятой для разделения операторов:
источник
Вы также можете использовать
until
команду:Обратите внимание, что, в отличие от
while
,until
будет выполнять команды внутри цикла, пока условие теста имеет статус выхода, который не равен нулю.Используя
while
цикл:Используя
for
цикл:Еще один способ использования
until
:источник
until ((0)); do foo; sleep 2; done
Не похоже на работу. Это непрерывное бесконечное.Очень простой бесконечный цикл .. :)
На ваш вопрос это будет так:
источник
Мне нравится использовать точки с запятой только для оператора WHILE, а оператор &&, чтобы цикл делал больше, чем одно ...
Поэтому я всегда так делаю
источник
&&
в цикле такое же, как и в любое другое время, не так ли. Нужно ли, чтобы второе происходило только в том случае, если первое происходит, тогда достаточно использовать&&
другое;
. Действительно, вы хотите, чтобы содержимое этого цикла было коротким и простым, в идеале всего одна команда, то есть функция или скрипт.Для простого наблюдения за процессом используйте
watch
вместоисточник
Использование
while
:Используя
for
Loop:Использование
Recursion
, (немного отличное от описанного выше, прерывание клавиатуры не остановит его)источник
Если вы хотите, чтобы цикл while останавливался после некоторого условия, и ваша
foo
команда возвращает ненулевое значение при выполнении этого условия, вы можете заставить цикл прерываться следующим образом:Например, если
foo
команда удаляет вещи в пакетном режиме и возвращает 1, когда нечего удалять.Это хорошо работает, если у вас есть собственный скрипт, который должен выполнять команду много раз, пока не произойдет какое-либо условие. Вы пишете сценарий для выхода,
1
когда условие выполняется, и выход,0
когда его нужно запустить снова.Например, допустим, у вас есть скрипт Python,
batch_update.py
который обновляет 100 строк в базе данных и возвращает,0
если есть что-то еще для обновления и1
если их больше нет. Следующая команда позволит вам обновлять строки 100 за один раз с перерывами на 5 секунд между обновлениями:источник
foo
команду выхода с кодом,1
когда хотите, чтобы цикл while прервался. Я обновил свой ответ с примером.Если я могу привести два практических примера (с небольшим количеством «эмоций»).
Это записывает имя всех файлов, оканчивающихся на «.jpg» в папке «img»:
Это удаляет их:
Просто пытаюсь внести свой вклад.
источник
ls -1 *.jpg
иrm *.jpg
Вы можете попробовать это тоже ВНИМАНИЕ: этого делать не следует, но поскольку вопрос заключается в бесконечном цикле без конца ... это то, как вы можете это сделать.
источник