Eu tenho abaixo cenário como:
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
fonte
fonte
Respostas:
Existem muitas maneiras de fazer esse loop.
Com
ksh93
sintaxe (também suportada porzsh
ebash
):Para qualquer shell semelhante ao POSIX:
Ambos os loops dormem 10 segundos em cada iteração antes de testar a existência do arquivo novamente.
Após a conclusão do loop, você terá que testar a existência do arquivo pela última vez para descobrir se o loop saiu devido à execução 10 vezes ou devido à exibição do arquivo.
Se desejar, e se você tiver acesso às ferramentas inotify, poderá substituir a
sleep 10
chamada porIsso aguardaria a ocorrência de um evento de criação de arquivo no diretório atual, mas atingia o tempo limite após 10 segundos. Dessa forma, seu loop sairá assim que o nome do arquivo especificado aparecer (se ele aparecer).
O código completo, com
inotifywait
(substitua por,sleep 10
se você não quiser isso), pode parecerfonte
inotifywait
como um substituto parasleep
.Se a contagem não for uma variável, você poderá usar a expansão entre chaves:
Se a contagem for uma variável, você pode usar o
seq
comando:fonte
$(seq $count)
embora
test -e file && exit
seja mais flexívelfonte
exists1
esse, ele ainda imprime vários erros se / quando um arquivo correspondente não for encontrado. (Também erros se houver várias correspondências.) Qualquer outra shell Testei parece dar erros em qualquer caso ...done 2<>/dev/null
. fazbash
isso com script? eu pensei que isso só acontecia em um-i
contexto não-ativo . ainda,exists?
é tanto quanto um nome de preenchimento comofile
. Mas sim, eu odeio citar em redirecionamentos - se parafusos de modo muito para cima.test -e
.