我在專有服務器上;我對此一無所知。我們經常使用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