Mam poniższy scenariusz:
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
źródło
źródło
Odpowiedzi:
Istnieje wiele sposobów wykonania tej pętli.
Ze
ksh93
składnią (obsługiwaną również przezzsh
ibash
):Dla dowolnej powłoki podobnej do POSIX:
Obie pętle śpią po 10 sekund w każdej iteracji przed ponownym przetestowaniem istnienia pliku.
Po zakończeniu pętli będziesz musiał ostatni raz sprawdzić, czy plik istnieje, aby dowiedzieć się, czy pętla zakończyła się z powodu uruchomienia 10 razy, czy z powodu pojawienia się pliku.
Jeśli chcesz i masz dostęp do narzędzi inotify, możesz zastąpić
sleep 10
połączenieTo czekałoby na wystąpienie zdarzenia tworzenia pliku w bieżącym katalogu, ale upłynęło 10 minut. W ten sposób pętla kończy się, gdy tylko pojawi się nazwa pliku (jeśli się pojawi).
Może wyglądać pełny kod z
inotifywait
(zamień na,sleep 10
jeśli tego nie chcesz)źródło
inotifywait
jako zamiennik drop-insleep
.Jeśli liczba nie jest zmienną, możesz użyć rozwinięcia nawiasu:
Jeśli liczba jest zmienną, możesz użyć
seq
polecenia:źródło
$(seq $count)
choć
test -e file && exit
jest bardziej elastycznyźródło
exists1
lub podobnego pliku , nadal wyświetla wiele błędów, jeśli / kiedy nie znaleziono pasującego pliku. (Również błędy jeśli istnieje wiele meczów.) Każda inna powłoka Testowałem wydaje się dawać błędy w każdym razie ...done 2<>/dev/null
. czybash
to jest skrypty? myślałem, że to działa tylko w-i
nieoperacyjnym kontekście. wciążexists?
jest tak samo jak nazwa wypełniacza jakfile
. ale tak, nienawidzę cytowania w przekierowaniach - jeśli to wszystko psuje.test -e
.