确定定义bash函数的位置

时间:2012-07-13 21:35:48

标签: linux bash shell scripting sh

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

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

2 个答案:

答案 0 :(得分: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(或者可能重新设置为相同的值)。

答案 1 :(得分:0)

查看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主机上进行了测试