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 eval
ou un préfixe comme time
ou 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 which
ou 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