Come eseguire tutti gli script in un percorso?


13

Supponiamo che io abbia uno script che riceve un percorso come parametro. Come potrei eseguire tutti gli script che si trovano in quel percorso?

Risposte:


14

Supponendo per percorso intendevi il percorso di una directory, usa run-parts. Da man run-parts:

run-parts - run scripts or programs in a directory

All'inizio è necessario impostare l'autorizzazione di esecuzione su tutti gli script che si desidera eseguire. Normalmente run-partsignorerà le directory e anche i file che non sono eseguibili risiedono in quella directory.

Anche se prima di eseguire è necessario verificare quali file verranno eseguiti --testdall'opzione:

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

Devo dire che run-partsha una rigorosa convenzione di denominazione per gli script da eseguire:

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.

Controlla man run-partsper avere più idee.


Leggendo un po ', ho trovato questo: #! / Bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run per lo script in "$ scripts_to_run_dir" / * do if test -x "$ script"; poi "$ script" ha funzionato Ha funzionato per me, cosa ne pensi?
Lautaro Alvarez,

@LautaroAlvarez Quello che stai facendo con quello script, potrebbe essere facilmente fatto con un semplice comando run-parts /home/you/Dropbox/scripts_to_run.. stai attento alla denominazione però ..
heemayl

run-parts è fantastico. Ma ha fatto per cron.d e scrivere su syslog come cron.notice. Ma è una buona fonte di idee, come saltare la temp e i file di backup ...
mmv-ru

9

Le parti di esecuzione funzioneranno se gli script hanno i nomi corretti. Se non vuoi occuparti di rinominare i tuoi script per adattarli al run-partscomplesso schema di denominazione, potresti fare qualcosa di semplice come

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

Ciò tenterà di eseguire tutti i file (e le directory) presenti in ~/target. I 2>/dev/nullmessaggi di errore redirect in modo che non si lamentano quando si tenta di eseguire directory o file non eseguibili.

In alternativa, puoi provare il più sofisticato

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

Questo verificherà se ciascuno dei risultati è un file ( [ -f $file ]), è eseguibile ( [ -x $file ]) e solo se entrambi i test hanno esito positivo tenterà di eseguire il file.


Questo ha funzionato perfettamente per me in un progetto (un repository biforcuto) a cui sto lavorando - github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh .
Rob,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.