[英]How to execute from any directory Bash script that sources other Bash scripts (not using path variable)
我不是试图通过将脚本添加到我的Path变量来从任何目录执行Bash脚本。
我希望能够使用该文件的目录路径从任何目录执行脚本...但是我想要执行的文件来源其他文件,这就是问题所在。
如果我在目录file
有两个脚本myFunctions.sh
和sourceFunctions.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.