微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-如何从提供其他Bash脚本的任何目录Bash脚本执行(不使用路径变量)

我不尝试通过将脚本添加到我的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始终是绝对路径.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐