Załóżmy, że mam skrypt, który otrzymuje ścieżkę jako parametr. Jak mogę wykonać wszystkie skrypty znajdujące się na tej ścieżce?
Załóżmy, że mam skrypt, który otrzymuje ścieżkę jako parametr. Jak mogę wykonać wszystkie skrypty znajdujące się na tej ścieżce?
Odpowiedzi:
Zakładając, że przez ścieżkę rozumiesz ścieżkę do katalogu, użyj run-parts. Od man run-parts:
run-parts - run scripts or programs in a directory
Najpierw musisz ustawić uprawnienia do wykonywania wszystkich skryptów, które chcesz uruchomić. Zwykle run-partszignoruje katalogi, a także pliki, które nie są wykonywalne, znajdują się w tym katalogu.
Chociaż przed uruchomieniem powinieneś sprawdzić, które pliki będą uruchamiane przez --testopcję:
run-parts --test /path/to/directory
Powinienem wspomnieć, że run-partsma ścisłą konwencję nazewnictwa dla skryptów do wykonania:
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.
Sprawdź, man run-partsaby uzyskać więcej pomysłów.
run-parts /home/you/Dropbox/scripts_to_runzachowaj ostrożność przy nazywaniu ...
Części wykonawcze będą działać, jeśli skrypty mają poprawne nazwy. Jeśli nie chcesz zajmować się zmianą nazwy skryptu w celu dopasowania do run-partszłożonego schematu nazewnictwa, możesz zrobić coś tak prostego jak
for file in ~/target/*; do $file 2>/dev/null; done
Spowoduje to próbę wykonania wszystkich plików (i katalogów) znalezionych w ~/target. Te 2>/dev/nullkomunikaty o błędach przekierowania, więc nie będzie narzekać, gdy próbuje uruchomić katalogi lub niewystąpienia jednego lub pliki wykonywalne.
Alternatywnie możesz wypróbować bardziej wyrafinowane
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Spowoduje to sprawdzenie, czy każdy z wyników jest plikiem ( [ -f $file ]), jest wykonywalny ( [ -x $file ]) i tylko wtedy, gdy oba testy zakończą się powodzeniem, spróbuje wykonać plik.