【问题标题】:How to retrieve all tools used in shell script如何检索 shell 脚本中使用的所有工具
【发布时间】:2011-09-26 21:54:48
【问题描述】:

我有一堆使用某些命令和其他工具的 shell 脚本。

那么有没有一种方法可以列出 shell 脚本正在使用的所有程序? 从源代码中检索依赖项的一种方式。

【问题讨论】:

  • 您的问题不清楚,例如“解析工具”没有意义。您是否正在寻找您的脚本使用的程序列表?还是使用您的脚本的程序列表?
  • 更新问题。我正在寻找使用 shell 脚本的程序列表。

标签: linux shell


【解决方案1】:

使用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】:

    一种方法是在运行时。您可以使用-x 选项在debug mode 中运行bash 脚本,然后解析它的输出。所有执行的命令及其参数都将打印到标准输出。

    【讨论】:

    • bash --rpm-requires 以更易于阅读的方式执行此操作...您不知道在不运行脚本的情况下执行此操作的选项吗?
    • 我不认为你可以在不运行脚本的情况下可靠地做到这一点。 Here 我发现的唯一可能可以做到的工具。
    【解决方案3】:

    虽然我没有通用解决方案,但您可以尝试两种方法:

    1. 您可以使用 strace 查看您的脚本执行了哪些程序。
    2. 您可以在 pbuilder 环境中运行程序并查看缺少哪些包。

    【讨论】:

      【解决方案4】:

      由于 shell 的动态特性,您无法在不运行脚本的情况下执行此操作。

      例如:

      TASK="cc foo.c"
      time $TASK
      

      如果不运行 cc 被调用,即使在上面这样一个微不足道的例子中也很难确定。

      在运行时,您可以检查调试输出 sh -x myscript,正如 thiton (+1) 和 ks1322 (+1) 所指出的那样。您还可以使用strace 之类的工具来捕获所有exec() 系统调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        相关资源
        最近更新 更多