我不尝试通过将脚本添加到我的Path变量来从任何目录执行Bash脚本.
我希望能够使用该文件的目录路径从任何目录执行脚本……但是我要执行的文件源于其他文件,这就是问题所在.
如果我在带有两个脚本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中的源文件/myFunctions.sh更改为源文件/myFunctions.sh.
那么,如何才能独立于工作目录进行源操作,以便可以从任何所需的工作目录中运行sourceFunctions.sh?
谢谢
解决方法:
你有正确的主意.并不需要那么复杂:
source `dirname $0`/myFunctions.sh
我经常在脚本顶部计算“ HERE”:
HERE=`dirname $0`
然后根据需要在我的脚本中使用它:
source $HERE/myFunctions.sh
要注意的一件事是$HERE通常是相对路径.实际上,它将是您实际用于运行脚本的任何路径,即“.”.如果您没有提供路径.因此,如果您在脚本中“ cd”,则$HERE将不再有效.如果这是一个问题,则有一种方法(想不到的话)可以确保$HERE始终是绝对路径.