引用与执行脚本相关的文件
在我写的一个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议避免常用的$0
variables:
读
$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}