Neulich habe ich einige grundlegende Shell-Skripte getestet, die ich zum Spaß erstellt habe. Da ich neu im Shell-Scripting bin, habe ich die Scripts nacheinander ausgeführt und getestet. Es war in Ordnung, wenn es nur wenige Skripte gab. Da die Anzahl der Skripte zunahm, fand ich es etwas zeitaufwändig, sie alle zu testen. Nach ein wenig Websuche finde ich ein paar Methoden heraus, um alle Skripte in einem Verzeichnis unter Linux nacheinander auszuführen.
Alle Skripte in einem Verzeichnis unter Linux ausführen
Ich habe ein paar Skripte in meinem Dokumentenverzeichnis.
$ ls Documents/ linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh
Alle von ihnen sind einfache Einzeiler-Shell-Skripte, die die angegebene(n) Zeichenkette(n) mit dem "echo"-Befehl in der Standardausgabe anzeigen.
Bevor ich wusste, dass wir alle Skripte in einem Ordner ausführen können, habe ich das Skript normalerweise wie folgt ausführbar gemacht:
$ chmod +x script.sh
Dann führe ich es mit dem Befehl:
aus$ ./script.sh
Oder,
$ sh script.sh
Wieder mache ich das zweite Skript ausführbar und führe es aus und so weiter.
Nun, es gibt einen besseren Weg, dies zu tun. Wir können alle Skripte in einem Verzeichnis oder Pfad mit "run-parts" ausführen Befehl. Der Befehl run-parts wird verwendet, um Skripte oder Programme in einem Verzeichnis oder Pfad auszuführen.
$ run-parts <directory-path>
Ein Nachteil des Befehls run-parts besteht darin, dass nicht alle Skripte ausgeführt werden. Es funktioniert nur, wenn Ihre Skripts die richtigen Namen haben. Die Namen müssen vollständig aus ASCII-Groß- und Kleinbuchstaben, ASCII-Ziffern, ASCII-Unterstrichen und ASCII-Minus-Bindestrichen bestehen.
Um dieses Benennungsproblem zu lösen, können wir den regex verwenden Möglichkeit. Der folgende Befehl findet beispielsweise alle Skriptdateien in ~/Documents und führt sie aus Verzeichnis, das mit dem Buchstaben 's' beginnt und mit 'sh' endet Erweiterung:
$ run-parts --regex '^s.*sh$' ~/Documents
Führen Sie alle Skripte in einem Verzeichnis unter Linux mit dem Befehl run-parts
ausFehlerbehebung:
Wenn Sie auf einen Fehler wie den folgenden gestoßen sind;
run-parts: failed to exec Documents/script1.sh: Exec format error
Lesen Sie die folgende Anleitung, um das Problem zu beheben.
- „Exec-Formatfehler“ beim Ausführen von Skripten mit dem Befehl „run-parts“ behoben
Um alle Skriptdateien auszuführen, die mit .sh im Documents-Verzeichnis enden, führen Sie auf ähnliche Weise Folgendes aus:
$ run-parts --regex '.*sh$' ~/Documents
Um die Namen aller Dateien im Documents-Verzeichnis auszugeben, die mit dem Buchstaben „s“ beginnen und mit der Erweiterung „sh“ enden, führen Sie Folgendes aus:
$ run-parts --list --regex '^s.*sh$' Documents Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Dieser Befehl gibt nur den Namen der Skriptdateien aus, führt sie aber nicht aus.
Um alle Dateien aufzulisten, die mit .sh im Dokumentenverzeichnis enden, führen Sie Folgendes aus:
$ run-parts --list --regex '.*sh$' Documents Documents/linux.sh Documents/ostechnix.sh Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Der Befehl run-parts wird hauptsächlich von Cron-Jobs verwendet und ist für die manuelle Verwendung nicht zuverlässig.
Ein weiterer Weg, um zu vermeiden, dass Sie Ihre Skripte umbenennen müssen, damit sie zu run-parts passen Benennungsstruktur können Sie find verwenden oder for-Schleife Befehle.
Um alle Skriptdateien zu finden und auszuführen, die mit dem Buchstaben "s" beginnen Führen Sie im Ordner ~/Documents Folgendes aus:
$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;
Wenn Sie alle Skripte im angegebenen Verzeichnis und allen seinen Unterverzeichnissen ausführen möchten, entfernen Sie die maxdepth Option im obigen Befehl:
$ find ~/Documents -type f -executable -name 's*' -exec {} \;
Um alle Skripte auszuführen, die mit der Erweiterung .sh" enden , ausführen:
$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;
Finden und führen Sie alle Skripte in einem Verzeichnis in Linux mit dem Befehl find
ausDiese Methode hat auch einen kleinen Nachteil. Dieser Befehl kann nur die Skripte ausführen, die von Ihrer aktuellen Shell interpretiert werden können. Wenn Sie alle Arten von Skripten ausführen möchten, zum Beispiel awk, perl, python, Shell-Skripte, verwenden Sie for loop Methode wie unten.
$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Der obige Befehl führt die Skripte aus, die mit dem Buchstaben „s“ im Ordner „~/Documents“ beginnen. Wenn Sie alle Dateien ausführen möchten, die mit der Erweiterung „.sh“ enden, tun Sie Folgendes:
$ for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Weitere Einzelheiten finden Sie in den Manpages.
$ man run-parts
$ man find
Hoffe das hilft.