2016-02-28 36 views
1

我發現不同的解決方案來獲得sh腳本自己的路徑,但它們都不能在純POSIX sh中通過.工作。 的解決方案,我到現在爲止:在SH如何獲得sh腳本自己的路徑,即使通過`.`

dirname $(readlink -f $0) 

作品,但給人的$0父腳本的路徑是流程相關的(見上文)

${BASH_SOURCE[0]} 

這顯然是一種只bash的解決方案。

證明此解決方案不起作用:

$ tree --noreport 
. 
├── script1.sh 
└── src 
    └── script2.sh 

$ cat script1.sh 
#!/bin/sh 
. src/script2.sh 

$ cat src/script2.sh 
#!/bin/sh 
echo '$0 :' $(dirname $(readlink -f $0)) 
echo '$BASH_SOURCE :' $BASH_SOURCE 

$ sh script1.sh 
$0 : /tmp/sof 
$BASH_SOURCE : 

我可以在script2.sh寫什麼,以獲得正確的/ tmp/SOF/src目錄?

+1

無論如何不確定它是否能夠正常工作,在執行過程中或多或少的執行過程中,Script2.sh都是源代碼,沒有執行並且在** script1.sh中像**一樣使用。它瘋了,bash有辦法* *周圍工作*這個... – Olli

+0

可能重複或遷移的理由:http://unix.stackexchange.com/q/4650 – Harald

+0

@Harald此答案給出了此操作不起作用案件。爲tcsh提供的解決方案檢測腳本是否來源,但沒有給出路徑。 – Dunatotatos

回答

1

因爲當你在script1.sh中輸入script2.sh時,或多或少不可能找到script2.sh所在的目錄,請嘗試在它周圍工作。您還可以在script1.sh中找到script1的目錄,並且您也知道script2.sh的相對路徑。然後,您可以在script1.sh中設置一個環境變量,指向script2.sh的目錄,然後再獲取它。然後你可以在script2.sh中訪問這個變量

+0

不是最好的想法,因爲我希望'script2.sh'儘可能容易地從'script1.sh'中使用。在找到腳本之前導出環境變量並不容易。但是通過一個安裝步驟,我會在自己的腳本中硬編寫'script2.sh'的位置。我接受你的回答,因爲我的解決方法不能回答我的第一個問題,但你的答案確實如此。 – Dunatotatos

相關問題