源bash脚本到另一个

lik*_*ern 6 bash shell

可能重复:
bash脚本获取自身完整路径的可靠方式?

我有bash脚本test.sh,它search.sh通过以下行使用来自另一个脚本的函数:

source ../scripts/search.sh
<call some functions from search.sh>
Run Code Online (Sandbox Code Playgroud)

这两个脚本都位于git存储库中.search.sh<git_root>/scripts/目录中,test.sh位于同一目录中(但是,一般来说,可以位于<git_root>目录内的任何位置- 我的意思是我不能依赖于以下source search.sh方法).

当我test.sh<git_root>/scripts/一切调用脚本运行良好,但一旦我更改当前工作目录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 ...
Run Code Online (Sandbox Code Playgroud)

因此,我有:

  1. search.sh脚本对<git_root>目录的相对路径

我想要的是:能够test.sh从内部任何地方运行<git_root>而不会出错.

PS:无法使用永久绝对路径,search.sh因为git存储库可以克隆到任何位置.

Som*_*ude 3

如果两个脚本位于同一目录中,那么如果您获取正在运行的脚本所在的目录,则可以使用该目录作为调用另一个脚本的目录:

# Get the directory this script is in
pushd `dirname $0` > /dev/null
SCRIPTPATH=`pwd -P`
popd > /dev/null

# Now use that directory to call the other script
source $SCRIPTPATH/search.sh
Run Code Online (Sandbox Code Playgroud)

取自问题的已接受答案,我将此问题标记为重复项:https ://stackoverflow.com/a/4774063/440558