如何列出shell scipt的层次结构/树结构?

时间:2015-08-18 15:01:57

标签: linux shell

假设我们有三个shell脚本,分别称为A1,A2和A3。 A1将拨打A2,A2将拨打A3。

是否有任何命令可以列出它们的树结构?说shelltree

shelltree A1

结果如下:

A1
 |---A2
        |---A3

1 个答案:

答案 0 :(得分:1)

您可以使用显示正在运行的进程的pstree作为树。

例如:

$ bash -c '(bash -c "sleep 20"); sleep 20' &
[1] 23863
$ pstree $(pgrep -fn bash)
-+= 23863 user bash -c (bash -c "sleep 20"); sleep 20
 \--- 23864 user sleep 20

用法:

pstree -p [pid ...]

或更复杂的例子(基于this):

#!/bin/bash
d=$1
f(){ let d--; if [ $d -gt 0 ]; then bash -x $0 $d $$; else [ $d -eq 0 ]  && pstree -p $$; fi }; f

输出:

$ bash foo.sh 5
+ pstree -p 76216
-+= 00001 root /sbin/launchd
 \-+= 00231 kenorb /sbin/launchd
   \-+= 00246 kenorb /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_49164
     \-+= 70321 root login -pfl kenorb /bin/bash -c exec -la bash /usr/local/bin/bash
       \-+= 70322 kenorb -bash
         \-+= 76212 kenorb bash foo.sh 5
           \-+- 76213 kenorb bash -x foo.sh 4 76212
             \-+- 76214 kenorb bash -x foo.sh 3 76213
               \-+- 76215 kenorb bash -x foo.sh 2 76214
                 \-+- 76216 kenorb bash -x foo.sh 1 76215
                   \-+- 76217 kenorb pstree -p 76216
                     \--- 76218 root ps -axwwo user,pid,ppid,pgid,command