Я хочу перечислить все скрипты (рекурсивно), которые вызываются главным скриптом. Например:
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.
Это похоже на команду дерева для скриптов.
Вывод может быть таким:
master.sh
-a.sh
|- a1.sh
|-something.sh
|-something_else.sh
-a2.sh
|-x.sh
|-y.sh
-a3.sh
...
решение1
Лучший способ сделать это — pstree
. Он выведет список всех запущенных процессов в удобном древовидном формате. Вы можете использовать -H
опцию для выделения определенной команды (заданной какПИД). В примере ниже я использую pgrep
для получения PID master.sh
:
pstree -H `pgrep master.sh` |grep -A 2 master.sh
|-bash---master.sh-+-a1.sh---something.sh
| |-a2.sh
| |-a3.sh
Команда ps
также может сделать то, что вам нужно, ps
команда может сделатьвсекроме как сварить чашку хорошего кофе:
ps xjf
Это выведет список всех процессов, запущенных master.sh
(фактически, это будет списоквсепроцессы, в том числе запущенные master.sh
) в древовидном формате:
\_ master.sh
| \_ a1.sh
| \_ something.sh
| \_ something.sh
| \_ a2.sh
| \_ a3.sh
Я показываю здесь только соответствующий вывод, указанная выше команда также предоставит вам различную другую информацию, такую как PID, статус процесса и т. д. и т. п.