引用与执行脚本相关的文件

在我写的一个bash脚本中,我使用source来包含configuration文件中定义的variables。 要执行的脚本是act.sh ,而作为source的脚本是act.conf.sh ,所以在act.sh我有:

 source act.conf.sh 

但是,这只适用于在包含它的目录中运行act.sh ,因为act.conf.sh指的是放置在工作目录下的文件。 有没有一种解决scheme,使其引用该文件相对于正在执行的脚本,而无需调用cd ? 谢谢。

请参阅: BASH FAQ条目#28:“如何确定脚本的位置?我想从同一个地方读取一些configuration文件。

任何解决scheme都不会100%的时间工作:

意识到在一般情况下,这个问题是无法解决的。 您可能听说过的任何方法,以及下面将详细介绍的任何方法都有缺陷,只会在特定情况下起作用。 首先,尽量避免这个问题完全取决于脚本的位置!

如果您需要编写一个非常可重用的工具,那么将正确的path作为脚本的参数将是最可靠的方法

假设你的脚本只能从某些shell运行,并且只需要一点灵活性,那么你可以放松一些偏执狂。 看看你的select还是很好的。 人们使用的常见模式特别有问题。

特别是,FAQbuild议避免常用的$0variables:

$0将永远是防弹的,因为$0本身是不可靠的。

作为替代,您可以使用$BASH_SOURCE 。 像这样的东西:

 source "${BASH_SOURCE%/*}/act.conf.sh" 

这个解决scheme也有一些注意事项。 查看FAQ页面,了解不同解决scheme之间的权衡。 他们似乎build议cd$BASH_SOURCE结合使用的情况下,因为你得到一个方便的错误条件,当它无法正常扩展的情况下。

看到这个: Bash:如何_best_包含其他脚本?

我build议使用:

 source $(dirname $0)/act.conf.sh 

尝试以下操作:

 source ${BASH_SOURCE[0]/%act.sh/act.conf.sh}