Linux 确定bash函数的定义位置

Linux 确定bash函数的定义位置,linux,bash,shell,scripting,sh,Linux,Bash,Shell,Scripting,Sh,我在一个专有服务器上;我对此一无所知。我们经常使用bash函数来描述服务器,但是如果我编写一个使用该函数的bash脚本,它将无法工作 所以我想在脚本中加载原始源文件。除了“暴力”搜索方法外,还有没有其他方法可以确定源文件的位置?如果我输入-a函数,我可以看到定义,但看不到它的来源。此信息不容易获得。可能有帮助的是在启用调试(set-x)的情况下启动交互式登录shell。这将详细显示源进程 bash -ilx 当我像这样启动bash shell时,我会看到如下内容: +++ . /etc/bas

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


所以我想在脚本中加载原始源文件。除了“暴力”搜索方法外,还有没有其他方法可以确定源文件的位置?如果我输入-a函数,我可以看到定义,但看不到它的来源。

此信息不容易获得。可能有帮助的是在启用调试(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\u completion/dd已来源,路径已修改(或可能重新设置为相同的值)。

此信息不可用。可能有帮助的是在启用调试(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\u completion/dd已来源,路径已修改(或可能重新设置为相同的值)。

请查看

我尝试在我的脚本顶部添加以下内容,它似乎给出了函数调用的文件名/行号

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

我使用Bash4.1.2在CentOS 6.2主机上进行了测试,请查看

我尝试在我的脚本顶部添加以下内容,它似乎给出了函数调用的文件名/行号

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

我使用bash 4.1.2在CentOS 6.2主机上进行了测试,但您没有抓住要点。我不知道该函数驻留在哪里,因此不需要修改脚本来跟踪这些细节。如果我编写自己的脚本,函数调用将失败,因为引用的脚本不会自动来源。有趣的信息,但你回答的是另一个问题。你没有抓住要点。我不知道该函数驻留在哪里,因此不需要修改脚本来跟踪这些细节。如果我编写自己的脚本,函数调用将失败,因为引用的脚本不会自动来源。有趣的信息,但你回答的是另一个问题。