我有一堆shell脚本,它们使用了一些命令和其他工具。
那么有没有办法列出shell脚本正在使用的所有程序? 从源代码中检索依赖关系的方法。
答案 0 :(得分:2)
你可以做的一种方法是在运行时。您可以使用-x
选项在debug mode中运行bash脚本,然后解析它的输出。所有已执行的命令及其参数将打印到标准输出。
答案 1 :(得分:2)
使用sed
将管道和$(
转换为换行符,然后使用awk
输出行的第一个单词(如果它可能是命令)。管道进入which
以找到PATH中的主要命令词:
sed 's/|\|\$(/\n/g' FILENAME |
awk '$1~/^#/ {next} $1~/=/ {next} /^[[:space:]]*$/ {next} {print $1}' |
sort -u |
xargs which 2>/dev/null
答案 2 :(得分:1)
虽然我没有一般解决方案,但您可以尝试两种方法:
答案 3 :(得分:0)
由于shell的动态特性,如果不运行脚本,则无法执行此操作。
例如:
TASK="cc foo.c"
time $TASK
即使在如上所述的这样简单的例子中,如果没有运行cc
,这将很难确定。
在运行时,您可以检查由thiton(+1)和ks1322(+1)指出的调试输出sh -x myscript
。您还可以使用strace
之类的工具来捕获所有exec()
个系统调用。