我有一个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
脚本本身调用的脚本的路径?
您可以通过以下方式获取Bash脚本的路径:
${0%/*}
也就是说,采用$0
(argv[0]
,调用脚本时使用的完整路径和文件名),并去除最后一个斜杠及其后的斜杠(等效于$(dirname "$0")
)。
然后,您可以执行以下操作:
mydir=${0%/*}
source "$mydir/../../bin/load_bin"
或者,您甚至可以执行以下操作:
cd ${0%/*}
source '../../bin/load_bin'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句