2013-07-08 25 views
1

這永遠不會返回任何內容:readlink $Somevar。我可以有"${Somevar}","$Somevar",$Somevar${Somevar} - 它沒有區別。我繼續打印Somevar,我知道它有一個理智的價值。只需在終端輸入$Somevar(一旦我回顯/「調試」我的腳本給我的相對路徑和中止)給了我絕對路徑。但我需要能夠在腳本中獲得絕對路徑!如何從變量讀取鏈接路徑?

是否有可能使用readlink和變量一起使用?坦率地說,我不知道readlink甚至「知道」它正在傳遞一個變量。我甚至認爲在一個腳本中它會在readlink被調用之前被shell擴展。我已在終端(sans腳本)中使用「~/_src」進行了測試。它工作的唯一方法是如果我用沒有引號的方式編寫。但是,如果我將該值分配給一個變量我的機器上的其他功能與它一起工作,但readlink。

如何獲得絕對路徑?我甚至不關心我是否使用readlink。 我只是想從腳本中獲取絕對路徑。


UPDATE:(#1意見碎)

我標記爲Linux操作系統。我要求readlink,因爲我也想翻譯符號鏈接,但我很好地在單獨的步驟中做這件事。

此外,這也將失敗:ABSDIR=`cd $RELDIR; pwd`

bash: cd: ~/_src/: No such file or directory 

(其中有這樣一個目錄,cd會找到它,如果我輸入終端上精確的目錄名)。我現在猜測,~/由終端本身擴大。

那麼,有沒有辦法處理這樣的路徑?實際上,我認爲處理這些路徑的所有實用程序都只能工作,因爲終端在調用它們之前擴展了路徑。

回答

2

在Cygwin的,我也有同樣的行爲,所以我追加了一些的標誌,比如-f,它工作正常:

readlink -f $Somevar 
+0

在將我的頭撞向我讀了另一個關於代字符的問題,它適用於我找到的所有相對路徑。解決方法是在重新分配時使用eval,而不是試圖將eval粘貼到要用於路徑的命令中:''''eval echo $ {RELDIR //>}'「''' – SaburoutaMishima

4

首先,readlink在Linux或OSX上的功能稍有不同。用操作系統而不是bash標記你的問題是一個好主意,尤其是因爲readlink不是bash內置,而是一個可執行文件。

其次,如果你想得到一個絕對路徑,爲什麼這不是你的問題的標題?

的方便,可移植的方式獲得目錄的絕對路徑是

ABSDIR=`cd $RELDIR; pwd` 

文件是多一點的工作:

ABSFILE=`cd $(dirname $RELFILE); pwd`/`basename $RELFILE` 
+1

*如果將此應用於包含空格的路徑,請不要忘記引號。 –

+0

我添加了對我的問題的更新。如果您有任何想法,請閱讀。感謝您已經停止! – SaburoutaMishima

+0

在將我的頭撞向牆壁之後,我讀了另一個關於代字符的問題,它適用於我找到的所有相對路徑。解決方法是在重新分配時使用eval,而不是試圖將eval粘貼到要用於路徑的命令中: '''''''eval echo $ {RELDIR //>}'「'' – SaburoutaMishima