【发布时间】:2012-12-23 14:49:24
【问题描述】:
可能重复:
Reliable way for a bash script to get the full path to itself?
我有 bash 脚本 test.sh,它通过以下几行使用另一个 search.sh 脚本中的函数:
source ../scripts/search.sh
<call some functions from search.sh>
这两个脚本都位于 git 存储库中。 search.sh 在<git_root>/scripts/ 目录中,test.sh 位于同一目录中(但一般来说,可以位于<git_root> 目录内的任何位置 - 我的意思是我不能依赖以下source search.sh 方法)。
当我从<git_root>/scripts/ 调用test.sh 脚本时,一切正常,但是一旦我更改当前工作目录test.sh 失败:
cd <git_root>/scripts/
./test.sh //OK
cd ..
./scripts/test.sh //FAILS
./scripts/test.sh: line 1: ../scripts/search.sh: No file or directory ...
这就是我所拥有的:
-
search.sh脚本到<git_root>目录的相对路径
我想要什么:能够在<git_root> 内的任何地方运行test.sh 而不会出错。
P.S.:不能使用search.sh 的永久绝对路径,因为可以将 git 存储库克隆到任何位置。
【问题讨论】:
-
不重复。我尝试了此链接中的方法。但这不是我的情况,因为在这里我不需要获取我的
test.sh脚本的路径。 -
也许我说的很明显,但是如果您目前
source是当前目录的相对路径,那么从脚本路径中获取相对路径似乎是一个很好的改进。唯一的问题是如果用户将脚本完全移动到不同的位置,但我无法想象你会如何解决这个问题,除了使用环境变量。 -
如果
search.sh脚本与test.sh位于同一目录中,那么找到test.sh所在的路径肯定会有所帮助,因为您可以使用该路径来查找其他脚本.