Quiero enumerar todos los scripts (recursivamente) a los que llama un script maestro. Por ejemplo:
master.sh
a.sh >> this script calls a1.sh, a2.sh, a3.sh etc
b.sh >> this one calls b1.sh, b2.sh, something.sh, etc.sh..
c.sh > similarly.
Esto es como el comando de árbol para scripts.
La salida podría ser como
master.sh
-a.sh
|- a1.sh
|-something.sh
|-something_else.sh
-a2.sh
|-x.sh
|-y.sh
-a3.sh
...
Respuesta1
La mejor manera de hacer esto es pstree
. Enumerará todos los procesos en ejecución en un bonito formato de árbol. Puede utilizar la -H
opción para resaltar un comando específico (dado como unPID). En el siguiente ejemplo, estoy usando pgrep
para obtener el PID de master.sh
:
pstree -H `pgrep master.sh` |grep -A 2 master.sh
|-bash---master.sh-+-a1.sh---something.sh
| |-a2.sh
| |-a3.sh
El ps
comando también puede hacer lo que necesitas, el ps
comando puede hacertodoexcepto preparar una buena taza de café:
ps xjf
Esto enumerará todos los procesos iniciados por master.sh
(de hecho, enumerarátodoprocesos, incluidos los iniciados por master.sh
) en formato de árbol:
\_ master.sh
| \_ a1.sh
| \_ something.sh
| \_ something.sh
| \_ a2.sh
| \_ a3.sh
Aquí solo muestro el resultado relevante, el comando anterior también le brindará otros datos como el PID, el estado del proceso, etc., etc.