2012-07-13 46 views
1

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

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

回答

1

该信息不易获得。有什么可以帮助的是启动一个交互式登录shell,并启用调试(set -x)。这将向您显示详细的源程序。

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被修改(或可能重新设置为相同的值)。

0

退房的http://wiki.bash-hackers.org/scripting/debuggingtips/

我尝试添加接近我的脚本的顶部下列操作之一“产生X跟踪更为有用”部分,它看起来像它给人的文件名/行号函数调用。

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

我一个CentOS 6.2主机上测试使用bash 4.1.2

+0

你错过了这一点。我不知道那个函数在哪里,所以没有修改脚本来跟踪这些细节。如果我写我自己的函数调用失败,因为引用的脚本不会自动获取。有趣的信息,但你回答不同的问题。 – Neelands 2012-07-14 01:27:13