在bash脚本中包含来自相对路径的二进制文件

时间:2014-10-28 10:15:00

标签: linux bash shell path

我有一个project/bin/目录,该目录未包含在PATH中。它包含 二进制文件project/bin/oneproject/bin/two

bash脚本位于project/shell/script1/run.sh。现在,我想使用project/bin脚本中project/shell/script1/run.sh文件夹中的二进制文件。我希望有一个可以source d的全局脚本,并自动包含这些二进制文件。

所以,我创建了一个脚本project/bin/load_bin

#!/usr/bin/env bash

$local_bin_one='./one'
$local_bin_two='./two'

在我的project/shell/script1/run.sh我执行脚本:

#!/usr/bin/env bash

source '../../bin/load_bin'

但是,当我尝试使用$local_bin_one时,我收到了一个找不到文件的错误。这是因为$local_bin_one指向./one而不是../../bin/one

问题:如何从source '../../bin/load_bin'脚本本身找到调用project/bin/load_bin的脚本的路径?

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式获取Bash脚本的路径:

${0%/*}

即,取$0argv[0],调用脚本的完整路径和文件名),并删除最后一个斜杠以及之后的内容(相当于$(dirname "$0") )。

然后你可以这样做:

mydir=${0%/*}
source "$mydir/../../bin/load_bin"

或者你甚至可以这样做:

cd ${0%/*}
source '../../bin/load_bin'