我在专有服务器上;我对此一无所知。我们经常使用bash函数来描述服务器,但是如果我编写一个使用该函数的bash脚本,它将不起作用。确定定义bash函数的位置
所以我想在脚本中加载原始源文件。除了“强力”搜索方法之外,还有一种方法可以确定源文件的位置吗?如果我做type -a thefunction
我可以看到定义,但不是它来自哪里。
我在专有服务器上;我对此一无所知。我们经常使用bash函数来描述服务器,但是如果我编写一个使用该函数的bash脚本,它将不起作用。确定定义bash函数的位置
所以我想在脚本中加载原始源文件。除了“强力”搜索方法之外,还有一种方法可以确定源文件的位置吗?如果我做type -a thefunction
我可以看到定义,但不是它来自哪里。
该信息不易获得。有什么可以帮助的是启动一个交互式登录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被修改(或可能重新设置为相同的值)。
退房的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
你错过了这一点。我不知道那个函数在哪里,所以没有修改脚本来跟踪这些细节。如果我写我自己的函数调用失败,因为引用的脚本不会自动获取。有趣的信息,但你回答不同的问题。 – Neelands 2012-07-14 01:27:13