Diese Aufgabe ist nicht einfach zu automatisieren, da ein Skript möglicherweise Konstrukte verwendet, die die statische Analyse umgehen. Wenn es jemals eval
ein Präfix wie time
oder verwendet nice
, ist es nicht so einfach egrep -o '^[^ ]+ ? '
, Befehle abzurufen und sie durch which
oder auszuführen type
.
Am Ende ist die einzige Möglichkeit, absolut sicher zu sein, das Skript auszuführen und herauszufinden, was fehlschlägt. Wenn ein Skript gut geschrieben ist, sucht es vor der Ausführung nach Befehlen, die nicht dem Standard entsprechen. Wenn nicht, ist Versuch und Irrtum der einzige Weg, um sicher zu sein.
Trotzdem könnte so etwas helfen:
#!/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
Die Ausgabe sieht folgendermaßen aus:
$ ./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