Como listar todos os scripts chamados por um script mestre?

Como listar todos os scripts chamados por um script mestre?

Quero listar todos os scripts (recursivamente) que estão sendo chamados por um script mestre. Por exemplo:

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.

É como o comando tree para scripts.

A saída poderia ser como

master.sh
-a.sh
 |- a1.sh
    |-something.sh
    |-something_else.sh
-a2.sh
 |-x.sh
 |-y.sh
-a3.sh
...

Responder1

A melhor maneira de fazer isso é pstree. Ele listará todos os processos em execução em um belo formato de árvore. Você pode usar a -Hopção para destacar um comando específico (fornecido como umPID). No exemplo abaixo estou usando pgreppara obter o 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

O pscomando também pode fazer o que você precisa, o pscomando pode fazertudoexceto preparar uma boa xícara de café:

ps xjf

Isso listará todos os processos iniciados por master.sh(na verdade, listarátodosprocessos, incluindo aqueles lançados por master.sh) em formato de árvore:

\_ master.sh
|   \_ a1.sh
|       \_ something.sh
|       \_ something.sh
|   \_ a2.sh
|   \_ a3.sh

Estou mostrando apenas a saída relevante aqui, o comando acima também fornecerá várias outras informações, como PID, status do processo, etc.

informação relacionada