Ich habe unten Szenario wie:
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
quelle
quelle
Antworten:
Es gibt viele Möglichkeiten, diese Schleife durchzuführen.
Mit
ksh93
Syntax (auch unterstützt vonzsh
undbash
):Für jede POSIX-ähnliche Shell:
Beide Schleifen schlafen in jeder Iteration 10 Sekunden, bevor die Existenz der Datei erneut getestet wird.
Nachdem die Schleife beendet wurde, müssen Sie ein letztes Mal prüfen, ob die Datei vorhanden ist, um herauszufinden, ob die Schleife aufgrund einer zehnmaligen Ausführung oder aufgrund der angezeigten Datei beendet wurde.
Wenn Sie möchten und Zugriff auf inotify-tools haben, können Sie den
sleep 10
Anruf durch ersetzenDies würde warten, bis ein Dateierstellungsereignis im aktuellen Verzeichnis auftritt, würde jedoch nach 10 Sekunden eine Zeitüberschreitung aufweisen. Auf diese Weise wird Ihre Schleife beendet, sobald der angegebene Dateiname angezeigt wird (falls er angezeigt wird).
Der vollständige Code mit
inotifywait
(ersetzen durch,sleep 10
wenn Sie das nicht möchten) sieht möglicherweise so ausquelle
inotifywait
als Ersatz fürsleep
.Wenn die Anzahl keine Variable ist, können Sie die Klammererweiterung verwenden:
Wenn die Anzahl eine Variable ist, können Sie den folgenden
seq
Befehl verwenden:quelle
$(seq $count)
obwohl
test -e file && exit
ist flexiblerquelle
exists1
, werden immer noch eine Reihe von Fehlern ausgegeben, wenn keine passende Datei gefunden wird. (Auch es gibt Fehler, wenn es mehrere Übereinstimmungen gibt.) Jede andere Shell, die ich getestet habe, scheint auf jeden Fall Fehler zu geben ...done 2<>/dev/null
. Istbash
das ein Skript? Ich dachte, dass es das nur in einem-i
nteraktiven Kontext bewirkt. Trotzdemexists?
ist es so viel wie ein Füllername wiefile
. aber ja, ich hasse es, in Weiterleitungen zu zitieren - wenn es so viel vermasselt.test -e
.