bash – 引用相对于执行脚本的文件

前端之家收集整理的这篇文章主要介绍了bash – 引用相对于执行脚本的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我编写的bash脚本中,我使用source包含在配置文件中定义的变量。要执行的脚本是act.sh,而要提供的脚本是act.conf.sh,因此在act.sh中我有:
source act.conf.sh

然而,这仅在包含它的目录中运行act.sh时有效,因为act.conf.sh引用放置在工作目录下的文件。有没有解决方案,使其引用相对于执行脚本的文件而不调用cd?谢谢。

参见: BASH FAQ entry #28: “How do I determine the location of my script? I want to read some config files from the same place.”

任何解决方案都不会在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结合使用的情况下,它将为您工作,因为你得到一个方便的错误条件,当它无法正常扩展。

猜你在找的Bash相关文章