我并没有尝试通过将脚本添加到我的 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 始终是绝对路径。
关于linux - 如何从任何源自其他 Bash 脚本的目录 Bash 脚本执行(不使用路径变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797232/