GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So führen Sie alle Skripte in einem Verzeichnis unter Linux aus

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

aus

Fehlerbehebung:

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

aus

Diese 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.


Linux
  1. So aktualisieren Sie einen Linux-Symlink

  2. So erstellen Sie ein freigegebenes Verzeichnis für alle Benutzer in Linux

  3. So erhalten Sie die Verzeichnisgröße in Linux

  4. Linux:Wie man einen Befehl in einem bestimmten Verzeichnis ausführt

  5. Wie läuft Linux auf PS3?

So führen Sie Linux-Befehle im Hintergrund aus

So zählen Sie Dateien im Verzeichnis in Linux

So führen Sie Windows 95 unter Linux aus

So richten Sie Chrooted SFTP unter Linux ein

So führen Sie .sh-Dateibefehle auf einmal in Linux aus

So kopieren Sie das Verzeichnis unter Linux