Así es como terminé haciéndolo (disclaimer: un montón de esto es hack-ish, por lo que es posible que desee limpiar si se va a utilizar a largo plazo) ...
Supuestos : - El directorio actual contiene todos los scripts/binarios en cuestión. - Los archivos para construir el gráfico entran en subdir call_graph.
Creó la secuencia de comandos call_graph/make_tgf.SH:
#!/bin/bash
# Run from dir with scripts and subdir call_graph
# Parameters:
# $1 = sources (default is call_graph/sources.txt)
# $2 = targets (default is call_graph/targets.txt)
SOURCES=$1
if [ "$SOURCES" == "" ]; then SOURCES=call_graph/sources.txt; fi
TARGETS=$2
if [ "$TARGETS" == "" ]; then TARGETS=call_graph/targets.txt; fi
if [ ! -d call_graph ]; then echo "Run from parent dir of call_graph" >&2; exit 1; fi
(
# cat call_graph/targets.txt
for file in `cat $SOURCES `
do
for target in `grep -v -E '^ *#' $file | grep -o -F -w -f $TARGETS | grep -v -w $file | sort | uniq`
do echo $file $target
done
done
)
Entonces, me encontré con lo siguiente (terminé haciendo las secuencias de comandos única versión):
cat /dev/null | tee call_graph/sources.txt > call_graph/targets.txt
for file in *
do
if [ -d "$file" ]; then continue; fi
echo $file >> call_graph/targets.txt
if file $file | grep text >/dev/null; then echo $file >> call_graph/sources.txt; fi
done
# For scripts only:
bash call_graph/make_tgf.sh call_graph/sources.txt call_graph/sources.txt > call_graph/scripts.tgf
# For scripts + binaries (binaries will be leaf nodes):
bash call_graph/make_tgf.sh > call_graph/scripts_and_bin.tgf
entonces abrí el archivo de TGF resultando en yEd, y había yEd hacer el diseño (Diseño -> Jerárquico). Guardé como graphml para separar el archivo editable manualmente del generado automáticamente.
Encontré que había ciertos nodos que no eran útiles tener en el gráfico, como los scripts/binarios de utilidad que se llamaban por todos lados. Entonces, los eliminé de los archivos de orígenes/objetivos y los regeneré según fue necesario hasta que me gustó el conjunto de nodos.
Espero que esto ayude a alguien ...
Graphviz es una buena herramienta de visualización, pero es necesario comprobar la validez de su proceso de producción basename'd alguna manera antes de pasarla a Graphviz. Puede intentar usar bashdb para depurar sus scripts. – vissi
Lo que hago rutinariamente estos días es agregar un Depends: comment justo al comienzo de cada script que creo. Probablemente no sea factible hacerlo como una idea de último momento en una escala mayor, pero es una convención muy simple que me ha sido útil. – tripleee