這是我的情況:在bash2中,我如何找到源代碼的名稱?
我在源代碼控制中的名稱因路徑名稱組件而異(例如:scc/project/1.0/script和scc/project/1.1/script)的腳本有多個版本。在另一個目錄中,這些腳本之一有一個符號鏈接。符號鏈接名稱與腳本名稱無關,並且在某些情況下可能會定期更改。這個符號鏈接反過來是由bash使用'。'來源的。命令。
我需要知道的是:如何在帶有Bash 2和Perl 5.5的10年曆史系統上確定引用腳本的目錄?由於各種原因,系統必須使用,並且無法升級。
在bash 3或以上,我用這個:
dir=`perl -MCwd=realpath -MFile::Basename 'print dirname(realpath($ARGV[0]))' ${BASH_SOURCE[0]} $0`
道歉Perl的一個班輪 - 這本來是一個純Perl項目,shell腳本膠水一個非常小的量。
我已經能夠解決這個事實,即我使用的古代Perl不會從Cwd中導出「realpath」,但不幸的是,Bash 2.03.01不提供BASH_SOURCE或類似的東西已經能夠找到。作爲一種解決方法,我在一個文本文件中提供路徑信息,當我切換分支時手動更改路徑信息,但我真的很想將這個數字用於我自己使用的分支。
更新: 我很抱歉 - 顯然問題不明確。在任何情況下,我都不知道符號鏈接的名稱是什麼 - 這就是我試圖在運行時找到的。該腳本偶爾通過符號鏈接直接執行,但大多數情況下該鏈接是「。」的參數。命令在另一個腳本中運行。
另外,當腳本通過「。」來源時,$ 0沒有適當地設置,這是我試圖解決的全部問題。我爲鈍的道歉,但沒有解決方案完全取決於$ 0被設置是正確的。在Perl單線程中,我同時使用BASH_SOURCE和$ 0(BASH_SOURCE僅在腳本通過「。」來源時設置,因此單線程僅在沒有源時使用$ 0)。
會strace幫助您獲取有關invokeation的信息? – Lynch 2011-04-26 05:07:48