繁体   English   中英

如何从任何目录执行Bash脚本来源其他Bash脚本(不使用路径变量)

[英]How to execute from any directory Bash script that sources other Bash scripts (not using path variable)

我不是试图通过将脚本添加到我的Path变量来从任何目录执行Bash脚本。

我希望能够使用该文件的目录路径从任何目录执行脚本...但是我想要执行的文件来源其他文件,这就是问题所在。

如果我在目录file有两个脚本myFunctions.shsourceFunctions.sh

sourceFunctions.sh

#!/bin/bash
source ./myFunctions.sh
echoFoo

myFunctions.sh

function echoFoo()
{
    echo "foo"
}

我可以运行myFunctions.sh并且foo将打印到控制台,但如果我上一个目录并运行myFunctions.sh我得到错误

cd ..
file/sourceFunctions.sh
-bash: doFoo.sh: command not found

除非我在sourceFunctions.sh source file/myFunctions.sh更改为source file/myFunctions.sh

那么我怎么能独立于我的工作目录来源,所以我可以从我想要的任何工作目录运行sourceFunctions.sh

谢谢

你有正确的想法。 虽然不需要那么复杂:

source `dirname $0`/myFunctions.sh

我经常在脚本的顶部计算“HERE”:

HERE=`dirname $0`

然后在我的脚本中根据需要使用它:

source $HERE/myFunctions.sh

需要注意的一点是,这里的$ HERE通常是一条相对路径。 实际上,它将是您实际用于运行脚本的任何路径,或“。” 如果你没有提供路径。 因此,如果您在脚本中“cd”,则$ HERE将不再有效。 如果这是一个问题,有一种方法(不能想到它),以确保$ HERE始终是一个绝对的路径。

我最后只使用脚本本身的目录路径的变量作为源目录

所以

#!/bin/bash
source ./myFunctions.sh
echoFoo

#!/bin/bash
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
source ${SCRIPTPATH}/myFunctions.sh
echoFoo

资源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM