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 -H
opção para destacar um comando específico (fornecido como umPID). No exemplo abaixo estou usando pgrep
para 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 ps
comando também pode fazer o que você precisa, o ps
comando 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.