Vérifier les dépendances des scripts bash / shell

13

Existe-t-il une méthode / commande pour vérifier les dépendances d'un script bash? En d'autres termes, une réponse à cette question: quelles bibliothèques un utilisateur doit-il installer pour exécuter le script?

Je peux le faire manuellement en lisant le script et en vérifiant quelles autres bibliothèques / commandes il appelle mais cela n'est pas évident pour les longs scripts.

4m1nh4j1
la source

Réponses:

8

Le système de configuration automatique incroyablement mystérieux a été utilisé pour

produire des scripts shell pour configurer automatiquement les packages de code source du logiciel. Ces scripts peuvent adapter les packages à de nombreux types de systèmes de type UNIX sans intervention manuelle de l'utilisateur. Autoconf crée un script de configuration pour un package à partir d'un fichier modèle qui répertorie les fonctionnalités du système d'exploitation que le package peut utiliser, sous la forme d'appels de macro M4.

Si ce n'est pas suffisamment effrayant, attendez d'essayer d'écrire votre premier script autoconf. Les auteurs de autoconf ne craignent pas sa difficulté :

Ceux qui ne comprennent pas Autoconf sont condamnés à le réinventer, mal. L'objectif principal d'Autoconf est de faciliter la vie de l'utilisateur; faciliter la vie du mainteneur n'est qu'un objectif secondaire. Autrement dit, l'objectif principal n'est pas de rendre la génération de configure automatique pour les responsables de packages; l'objectif est plutôt de rendre la configuration indolore, portable et prévisible pour l'utilisateur final de chaque paquet autoconfiscé. Et à ce degré, Autoconf réussit très bien à atteindre son objectif - la plupart des plaintes adressées à la liste Autoconf concernent des difficultés à écrire les entrées Autoconf, et non le comportement de la configuration résultante.

D'un autre côté, vous sortirez du processus en en sachant plus sur les petits morceaux de divers systèmes que vous n'auriez jamais imaginé.

Ces jours-ci, personnellement, je supposerais qu'une distribution Debian-ish beaucoup plus standard était ma cible et ne me ferais pas écrire un autre script autoconf. J'ai la chance d'avoir le luxe de choisir cela; vous n'avez peut-être pas une telle latitude.

msw
la source
3

Ce n'est pas une tâche simple à automatiser, car un script peut utiliser des constructions qui défont l'analyse statique. S'il utilise evalou un préfixe comme timeou nice, ce ne sera pas aussi simple que d'exécuter quelque chose comme egrep -o '^[^ ]+ ? 'pour obtenir des commandes et les exécuter via whichou type.

En fin de compte, la seule façon d'être absolument sûr est d'exécuter le script et de découvrir ce qui échoue. Si un script est bien écrit, il vérifiera les commandes non standard avant de s'exécuter. Sinon, les essais et erreurs sont le seul moyen d'en être certain.

Cela dit, quelque chose comme ça pourrait aider:

#!/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 sortie ressemblera à:

$ ./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
blujay
la source