Verifique las dependencias del script bash / shell


13

¿Hay algún método / comando para verificar las dependencias de un script bash? En otras palabras, una respuesta a esta pregunta: ¿Qué bibliotecas debe instalar un usuario para ejecutar el script?

Puedo hacer esto manualmente leyendo el guión y verificando qué otras bibliotecas / comandos llama, pero esto no es evidente para los guiones largos.

Respuestas:


8

El increíblemente arcano sistema de autoconf se ha utilizado para

producir scripts de shell para configurar automáticamente paquetes de código fuente de software. Estos scripts pueden adaptar los paquetes a muchos tipos de sistemas similares a UNIX sin intervención manual del usuario. Autoconf crea un script de configuración para un paquete a partir de un archivo de plantilla que enumera las características del sistema operativo que el paquete puede usar, en forma de llamadas de macro M4.

Si eso no es lo suficientemente aterrador, espere hasta que intente escribir su primer script de autoconf. Los autores de autoconf no son tímidos sobre su dificultad :

Aquellos que no entienden Autoconf están condenados a reinventarlo mal. El objetivo principal de Autoconf es facilitar la vida del usuario; facilitar la vida del mantenedor es solo un objetivo secundario. Dicho de otra manera, el objetivo principal no es hacer que la generación de configuración sea automática para los mantenedores de paquetes; más bien, el objetivo es hacer que la configuración sea sencilla, portátil y predecible para el usuario final de cada paquete autoconfiscado. Y en este grado, Autoconf tiene un gran éxito en su objetivo: la mayoría de las quejas en la lista de Autoconf son sobre dificultades para escribir la entrada de Autoconf, y no en el comportamiento de la configuración resultante.

Por otro lado, saldrás del proceso sabiendo más sobre los fragmentos complicados de varios sistemas de lo que alguna vez imaginaste que existía.

En estos días, personalmente, asumiría que una distribución mucho más estándar de Debian-ish era mi objetivo y no me obligaba a escribir otro script de autoconf. Tengo la suerte de tener el lujo de elegir eso; Puede que no tengas tanta latitud.


3

Esta no es una tarea simple de automatizar, porque un script puede usar construcciones que derrotan el análisis estático. Si alguna vez usa evalo algún prefijo como timeo nice, no será tan simple como ejecutar algo como egrep -o '^[^ ]+ ? 'obtener comandos y ejecutarlos a través de whicho type.

Al final, la única forma de estar absolutamente seguro es ejecutar el script y descubrir qué falla. Si un script está bien escrito, buscará comandos no estándar antes de ejecutarlo. Si no, prueba y error es la única forma de estar seguro.

Dicho esto, algo como esto podría ayudar:

#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
    while read line
    do
        if type $line &>/dev/null
        then
            echo "$line found"
        else
            echo "Error: $line not found"
        fi
    done
} | sort

La salida se verá así:

$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.