Supongamos que tengo un script que recibe una ruta como parámetro. ¿Cómo podría ejecutar todos los scripts ubicados en esa ruta?
Supongamos que tengo un script que recibe una ruta como parámetro. ¿Cómo podría ejecutar todos los scripts ubicados en esa ruta?
Respuestas:
Suponiendo que por ruta se refería a la ruta a un directorio, use run-parts
. De man run-parts
:
run-parts - run scripts or programs in a directory
Al principio, debe establecer el permiso de ejecución en todos los scripts que desea ejecutar. Normalmente run-parts
ignorará los directorios y también los archivos que no son ejecutables residen en ese directorio.
Aunque antes de ejecutar debe verificar qué archivos se ejecutarán con la --test
opción:
run-parts --test /path/to/directory
Debo mencionar que run-parts
tiene una convención de nomenclatura estricta para que se ejecuten los scripts:
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.
Comprueba man run-parts
para tener más idea.
run-parts /home/you/Dropbox/scripts_to_run
tenga cuidado con la nomenclatura ...
Run-parts funcionará si sus scripts tienen los nombres correctos. Si no desea tratar de cambiar el nombre de sus scripts para que se ajusten run-parts
al complejo esquema de nombres, puede hacer algo tan simple como
for file in ~/target/*; do $file 2>/dev/null; done
Eso intentará ejecutar todos los archivos (y directorios) encontrados en ~/target
. Los 2>/dev/null
mensajes de error vuelve a dirigir por lo que no se quejan al intentar ejecutar directorios o archivos no ejecutables.
Alternativamente, puedes probar el más sofisticado
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Esto verificará si cada uno de los resultados es un archivo ( [ -f $file ]
), es ejecutable ( [ -x $file ]
) y solo si ambas pruebas son exitosas, intentará ejecutar el archivo.