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

标签 linux bash

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

关于linux - 如何从任何源自其他 Bash 脚本的目录 Bash 脚本执行(不使用路径变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797232/

相关文章:

linux - 无法使 bash 脚本从 cloud-init 运行

linux - AWK 查找第一次出现的字符串并分配给变量进行比较

linux - 如何使用不同的导出 IP 一次运行多个 Tor 进程?

python - 系统调用和信号处理程序

linux - 为 Docker 实例化复制文件时出错

linux - 性能 Read() 和 Write() 到/从 Linux SKB 的

linux - 多合一解压 Bash 脚本 Linux

用于在当前文件夹中运行可执行文件的 linux shell 脚本

linux 查找多种模式

bash - 回显到标准输出并追加到文件