source act.conf.sh
然而,这仅在包含它的目录中运行act.sh时有效,因为act.conf.sh引用放置在工作目录下的文件。有没有解决方案,使其引用相对于执行脚本的文件而不调用cd?谢谢。
任何解决方案都不会在100%的时间工作:
It is important to realize that in the general case,this problem has no solution. Any approach you might have heard of,and any approach that will be detailed below,has flaws and will only work in specific cases. First and foremost,try to avoid the problem entirely by not depending on the location of your script!
如果你需要编写一个非常可重用的工具,那么将正确的路径作为你的脚本的参数将是最可靠的方法。
假设你的脚本只能从某些shell中运行,并且只需要一点灵活性,你可以放松一些这种偏执。看看你的选择仍然是好的。人们使用的常见模式是特别有问题的。
特别是,FAQ建议避免使用非常常用的$ 0变量:
Nothing that reads
$0
will ever be bulletproof,because$0
itself is unreliable.
作为替代,您可以使用$ BASH_SOURCE。这样的东西:
source "${BASH_SOURCE%/*}/act.conf.sh"
这个解决方案也有一些注意事项。查看FAQ页面,看看不同解决方案之间的权衡。他们似乎建议cd与$ BASH_SOURCE结合使用的情况下,它将为您工作,因为你得到一个方便的错误条件,当它无法正常扩展。