2011-09-26 5 views
7

Tengo un montón de scripts de shell que utilizan algunos comandos y otras herramientas.Cómo recuperar todas las herramientas utilizadas en el script de shell

Entonces, ¿hay alguna manera de que pueda enumerar todos los programas que usan los scripts de shell? Tipo de forma de recuperar dependencias del código fuente.

+0

Su pregunta no es clara, por ejemplo, "analizar una función" no es significativo. ¿Estás buscando una lista de programas que tu script usó? ¿O una lista de programas que usan tus scripts? –

+0

Pregunta actualizada. Estoy buscando la lista de programas que usa script de shell. – deimus

Respuesta

2

Usa sed para traducir pipes y $( a newlines, luego usa awk para generar la primera palabra de una línea si es un comando. Los tubos en which para encontrar palabras de comando potiential en el PATH:

sed 's/|\|\$(/\n/g' FILENAME | 
awk '$1~/^#/ {next} $1~/=/ {next} /^[[:space:]]*$/ {next} {print $1}' | 
sort -u | 
xargs which 2>/dev/null 
2

Una forma de hacerlo es en tiempo de ejecución. Puede ejecutar el script bash en debug mode con la opción -x y luego analizar su salida. Todos los comandos ejecutados más sus argumentos se imprimirán a la salida estándar.

+0

bash --rpm-requires lo hace de una forma más humana legible ... ¿no sabes la opción de hacer esto sin ejecutar el script? – deimus

+0

No creo que pueda hacerlo de manera confiable sin ejecutar el script. [Aquí] (http://stackoverflow.com/questions/3926918/determine-function-and-file-dependency-of-a-shell-script/3928062#3928062) la única herramienta que encontré que probablemente podría hacerlo. – ks1322

1

Aunque no tengo solución general, usted podría tratar de dos enfoques:

  1. Es posible utilizar strace para ver qué programas fueron ejecutados por su guión.
  2. Puede ejecutar su programa en un entorno pbuilder y ver qué paquetes faltan.
0

Debido a la naturaleza dinámica del shell, no puede hacer esto sin ejecutar un script.

Por ejemplo:

TASK="cc foo.c" 
time $TASK 

Esto va a ser muy difícil de determinar sin correr cc que se llamó incluso en tales ejemplo trivial que el anterior.

En tiempo de ejecución, puede inspeccionar la salida de depuración sh -x myscript según lo señalado por thiton (+1) y ks1322 (+1). También puede herramienta como strace para capturar todos los exec() syscalls.

Cuestiones relacionadas