【问题标题】:Determining where a bash function was defined确定 bash 函数的定义位置
【发布时间】:2012-07-13 18:57:19
【问题描述】:

我在专有服务器上;我对此一无所知。我们经常使用一个 bash 函数来描述服务器,但是如果我编写一个使用该函数的 bash 脚本,它将无法工作。

所以我想在脚本中加载原始源文件。除了“蛮力”搜索方法之外,还有其他方法可以确定源文件的位置吗?如果我这样做 type -a thefunction 我可以看到定义,但看不到它的来源。

【问题讨论】:

    标签: linux bash shell scripting sh


    【解决方案1】:

    此信息不易获得。启动一个启用调试(set -x)的交互式登录 shell 可能会有所帮助。这将向您详细展示源流程。

    bash -ilx
    

    当我像这样启动 bash shell 时,我看到如下内容:

    +++ . /etc/bash_completion.d/dd
    ++++ have dd
    ++++ unset -v have
    ++++ PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/usr/local/sbin
    

    这告诉我,当 . /etc/bash_completion/dd 已获取,PATH 已修改(或可能重新设置为相同的值)。

    【讨论】:

      【解决方案2】:

      查看http://wiki.bash-hackers.org/scripting/debuggingtips/ 的“让 xtrace 更有用”部分

      我尝试在我的脚本顶部附近添加以下内容,看起来它为函数调用提供了文件名/行号。

      set -x
      export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
      

      我在带有 bash 4.1.2 的 CentOS 6.2 主机上进行了测试

      【讨论】:

      • 你没有抓住重点。我不知道该函数位于何处,因此无需修改脚本来跟踪这些细节。如果我自己编写函数调用失败,因为引用的脚本不是自动获取的。有趣的信息,但您正在回答不同的问题。
      猜你喜欢
      • 1970-01-01
      • 2015-06-27
      • 2022-01-21
      • 2019-10-09
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      相关资源
      最近更新 更多