我有一个project/bin/
目录,该目录未包含在PATH
中。它包含
二进制文件project/bin/one
和project/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
的脚本的路径?
答案 0 :(得分:0)
您可以通过以下方式获取Bash脚本的路径:
${0%/*}
即,取$0
(argv[0]
,调用脚本的完整路径和文件名),并删除最后一个斜杠以及之后的内容(相当于$(dirname "$0")
)。
然后你可以这样做:
mydir=${0%/*}
source "$mydir/../../bin/load_bin"
或者你甚至可以这样做:
cd ${0%/*}
source '../../bin/load_bin'