如何从另一个路径运行脚本,并知道脚本的路径?


8

我需要运行一个脚本,该脚本以与文件位于相同的路径访问文件。

例如:我有脚本/home/me/folder/script.sh,该脚本将访问文件/home/me/folder/myfile。由于文件位于脚本的相同路径中,因此我只使用name myfile而不是完整路径。

但是,如果我从运行它/tmp/,例如:

/tmp$ /home/me/folder/script.sh

它给了我:

myfile: No such file or directory

因此,如何在脚本中说出文件与脚本本身位于同一路径?


您可以显示myfile的用法吗?
Faheem Mitha

@Faheem Mitha:只是我的script.sh调用的另一个脚本。
汤姆·布里托

是否由于某些原因不想使用完整路径,或者不想将它们都移到PATH中?
Faheem Mitha

1
@Faheem Mitha:我希望能够将包含脚本的文件夹移动到另一个地方,甚至是另一台计算机,而无需重写myfile的路径。
汤姆·布里托

Answers:



9

您无法在所有情况下都知道,但是通常(并非总是)当您按路径运行脚本而不是让shell搜索时$PATH,脚本的路径在中$0。然后,您可以使用dirname "$0"${0%/*}获取路径。


4

我通常会在脚本的开头执行以下操作:

SCRIPTDIR=$(dirname "$0")

或者,要获取脚本目录的完整路径名(而不是相对路径名):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

然后${SCRIPTDIR}在需要的地方参考。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.