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?
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?
Antworten:
Angenommen, Sie haben den Pfad zu einem Verzeichnis angegeben, verwenden Sie run-parts
. Von 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 run-parts
werden die Verzeichnisse ignoriert und auch die Dateien, die nicht ausführbar sind, befinden sich in diesem Verzeichnis.
Obwohl Sie vor dem Ausführen prüfen sollten, welche Dateien mit der --test
Option ausgeführt werden:
run-parts --test /path/to/directory
Ich sollte erwähnen, dass run-parts
es eine strenge Namenskonvention für die auszuführenden Skripte gibt:
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.
run-parts /home/you/Dropbox/scripts_to_run
erledigen. Seien Sie jedoch vorsichtig bei der Benennung.
Run-Parts funktionieren, wenn Ihre Skripte die richtigen Namen haben. Wenn Sie sich nicht mit dem Umbenennen Ihrer Skripte nach run-parts
dem komplexen Benennungsschema befassen möchten , können Sie etwas ganz Einfaches tun
for file in ~/target/*; do $file 2>/dev/null; done
Das wird versuchen, alle Dateien (und Verzeichnisse) auszuführen, die sich in befinden ~/target
. Das 2>/dev/null
leitet Fehlermeldungen um, sodass es sich nicht beschwert, wenn es 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.