2012-07-13 75 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