我在专有服务器上;我对此一无所知。我们经常使用一个 bash 函数来描述服务器,但如果我编写一个使用该函数的 bash 脚本,它将无法工作。
所以我想在脚本中加载原始源文件。除了“蛮力”搜索方法之外,还有其他方法可以确定源文件的位置吗?如果我这样做,type -a thefunction
我可以看到定义,但看不到它的来源。
这些信息不容易获得。启动一个启用调试(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 已修改(或可能重新设置为相同的值)。
查看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 主机上进行了测试