Bash腳本獲取自身完整路徑的可靠方式我有一個(gè)Bash腳本需要知道它的完整路徑。我試圖找到一種廣泛兼容的方式來(lái)做到這一點(diǎn),而不會(huì)結(jié)束相對(duì)或時(shí)髦的路徑。我只需要支持Bash,而不是sh,csh等。到目前為止我發(fā)現(xiàn)了什么:從地址中獲取Bash腳本的源目錄的接受答案是獲取腳本的路徑dirname $0,這很好,但可能會(huì)返回相對(duì)路徑(如.),如果您想更改目錄中的目錄,這是一個(gè)問(wèn)題腳本并使路徑仍指向腳本的目錄。不過(guò),dirname將成為這個(gè)難題的一部分。對(duì)OS X的Bash腳本絕對(duì)路徑 的接受答案(特定于OS X,但答案無(wú)論如何)都會(huì)給出一個(gè)函數(shù),該函數(shù)將測(cè)試是否$0看起來(lái)相對(duì),如果是,則會(huì)預(yù)先掛起$PWD。但是結(jié)果仍然可以包含相對(duì)位(雖然總體來(lái)說(shuō)它是絕對(duì)的) - 例如,如果腳本t在目錄中/usr/bin并且你進(jìn)入/usr并且你輸入bin/../bin/t它來(lái)運(yùn)行它(是的,那是復(fù)雜的),你最終會(huì)得到/usr/bin/../binas腳本的目錄路徑。哪個(gè)有效,但......此頁(yè)面上的readlink解決方案如下所示:# Absolute path to this script. /home/user/bin/foo.shSCRIPT=$(readlink -f $0)# Absolute path this script is in. /home/user/binSCRIPTPATH=`dirname $SCRIPT`但是readlink不是POSIX,顯然解決方案依賴(lài)于GNU readlink,其中BSD由于某種原因無(wú)法工作(我無(wú)法訪問(wèn)類(lèi)似BSD的系統(tǒng)進(jìn)行檢查)。所以,各種方式,但他們都有他們的警告。什么是更好的方式?“更好”的意思是:給了我絕對(duì)的道路。即使以復(fù)雜的方式調(diào)用,也可以獲得時(shí)髦的位(參見(jiàn)上面#2的評(píng)論)。(例如,至少要對(duì)路徑進(jìn)行適度規(guī)范化。)僅依賴(lài)于Bash-isms或幾乎肯定會(huì)出現(xiàn)在最流行的* nix系統(tǒng)(GNU / Linux,BSD和類(lèi)似BSD的系統(tǒng),如OS X等)上的東西。如果可能,避免調(diào)用外部程序(例如,更喜歡Bash內(nèi)置程序)。(更新,感謝抬起頭,至極)它沒(méi)有解決符號(hào)鏈接(其實(shí),我倒是那種喜歡它,離開(kāi)他們獨(dú)自一人,但是這不是必須的)。
Bash腳本獲取自身完整路徑的可靠方式
嚕嚕噠
2019-08-23 14:22:32