У меня ниже сценарий, как:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
bash
shell-script
Rocky86
источник
источник
Ответы:
Есть много способов сделать этот цикл.
С
ksh93
синтаксисом (также поддерживаетсяzsh
иbash
):Для любой POSIX-подобной оболочки:
Оба цикла спят по 10 секунд в каждой итерации, прежде чем снова проверять наличие файла.
После завершения цикла вам придется в последний раз проверить наличие файла, чтобы выяснить, завершился ли цикл из-за 10-кратного выполнения или из-за появления файла.
Если вы хотите, и если у вас есть доступ к inotify-tools, вы можете заменить
sleep 10
звонок наЭто приведет к ожиданию события создания файла в текущем каталоге, но истечет время ожидания через 10 секунд. Таким образом, ваш цикл завершится, как только появится указанное имя файла (если оно появилось).
Полный код с
inotifywait
(заменить на,sleep 10
если вы этого не хотите) может выглядеть такисточник
inotifywait
заменуsleep
.Если число не является переменной, вы можете использовать расширение скобки:
Если счетчик является переменной, вы можете использовать
seq
команду:источник
$(seq $count)
хотя
test -e file && exit
более гибкийисточник
exists1
образом, он все равно печатает кучу ошибок, если / когда соответствующий файл не найден. (Также это ошибки, если есть несколько совпадений.) Любая другая оболочка, которую я тестировал, похоже, дает ошибки в любом случае ...done 2<>/dev/null
. этоbash
делает сценарий? я думал, что это только в-i
неконструктивном контексте. тем не менее,exists?
так же, как имя наполнителя, какfile
. но да, я ненавижу цитировать в перенаправлениях - если винты так много.test -e
.