Essa não é uma tarefa simples de automatizar, porque um script pode usar construções que anulam a análise estática. Se ele usar eval
algum prefixo como time
ou nice
, não será tão simples quanto executar algo como egrep -o '^[^ ]+ ? '
obter comandos e executá-los através de which
ou type
.
No final, a única maneira de ter certeza absoluta é executar o script e descobrir o que falha. Se um script estiver bem escrito, ele verificará comandos não padrão antes da execução. Caso contrário, a tentativa e erro é a única maneira de ter certeza.
Dito isto, algo como isto poderia ajudar:
#!/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
A saída será semelhante a:
$ ./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