it-swarm.com.de

Wie führe ich alle Skripte in einem Pfad aus?

Angenommen, ich habe ein Skript, das einen Pfad als Parameter empfängt. Wie kann ich alle Skripte ausführen, die sich in diesem Pfad befinden?

13
Lautaro Alvarez

Angenommen, Sie haben den Pfad zu einem Verzeichnis angegeben, verwenden Sie run-parts. Aus man run-parts:

run-parts - run scripts or programs in a directory

Zunächst müssen Sie die Ausführungsberechtigung für alle Skripte festlegen, die Sie ausführen möchten. Normalerweise ignoriert run-parts die Verzeichnisse und auch die Dateien, die nicht ausführbar sind, befinden sich in diesem Verzeichnis.

Sie sollten jedoch vor dem Ausführen prüfen, welche Dateien mit der Option --test ausgeführt werden:

run-parts --test /path/to/directory

Ich sollte erwähnen, dass run-parts eine strikte Namenskonvention für die auszuführenden Skripte hat:

If neither the --lsbsysinit option nor the --regex option is given 
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.

Überprüfen Sie man run-parts, um weitere Informationen zu erhalten.

14
heemayl

Run-Parts funktionieren, wenn Ihre Skripte die richtigen Namen haben. Wenn Sie Ihre Skripte nicht so umbenennen möchten, dass sie dem komplexen Namensschema von run-parts entsprechen, können Sie etwas ganz Einfaches tun

for file in ~/target/*; do $file 2>/dev/null; done

Dadurch wird versucht, alle in ~/target gefundenen Dateien (und Verzeichnisse) auszuführen. Der 2>/dev/null leitet Fehlermeldungen um, damit er sich nicht beschwert, wenn er versucht, Verzeichnisse oder nicht ausführbare Dateien auszuführen.

Alternativ können Sie auch das Anspruchsvollere ausprobieren

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done

Dadurch wird geprüft, ob jedes der Ergebnisse eine Datei ist ([ -f $file ]), ausführbar ist ([ -x $file ]), und nur wenn beide Tests erfolgreich sind, wird versucht, die Datei auszuführen.

9
terdon