2009-11-18 61 views
2

在執行中的Unix bash shell的shell腳本,例如在另一個文件夾中的任何文件和通過腳本引用引用一些其他的文件中像../../file_system_1/public/dir1/dir2/file2.xml在Unix Bash Shell中執行shell腳本時,如何爲相對路徑解析文件位置?

script.sh - >的引用DIR1/file1的爲」 ./dir1/file1" DIR1/file1的引用另一文件作爲所以相對../../file_system_1/public/dir1/dir2/file2.xml

file2解決了哪個文件?到script.sh位置或file1文件夾位置。

回答

1

你看到了什麼,如果你把ls放在script.sh中?這是評估相對路徑的起點。通常這是你當前的工作目錄。所以要回答你的問題:這可能既不是script.sh也不是file1的位置。

爲什麼可能?因爲這取決於你在腳本中做什麼。如果在script.sh中執行cd /home/,則包含路徑會更改。

+0

thx boldewyn,就是這樣。 非常感謝。 – yli 2009-11-18 13:56:30

+3

你可以做'pwd'而不是'ls'。結果更簡潔可用。 – 2009-11-18 15:04:35

+0

是的。我只想給一個容易理解的例子。 – Boldewyn 2009-11-18 15:20:54

2

在shell腳本中,..路徑名總是相對於當前工作目錄而不是任何其他文件路徑名。這是$PWD的值。

4

參照當前工作目錄解析相對路徑,如$(pwd)所示。

每次解析發生時,都會評估$(pwd)。這意味着相同的../myfile路徑字符串表示腳本中的cd命令之前和之後的不同文件。

1

它是相對於當前工作目錄解析的。如果腳本不改變cd或類似的目錄,則這是您啓動腳本時的目錄。

2

這取決於你的意思是「參考」。

相對路徑 - 用於訪問文件或目錄時 - 相對於當前進程的工作目錄進行解釋。 CWD由fork()和朋友繼承,所以腳本執行的任何子流程都將繼承CWD。解釋相對路徑由C庫和/或文件系統層完成,並且這在使用標準API的所有程序中的作用相同,而不僅僅是bash

如果你的路徑是而不是被用來訪問文件或文件夾,那麼它們只是字符串,不會「解析」任何東西。