2009-11-18 66 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

如果你的路径是而不是被用来访问文件或文件夹,那么它们只是字符串,不会“解析”任何东西。