加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 20:07:25 所属栏目:安全 来源:网络整理
导读:在我编写的bash脚本中,我使用source包含在配置文件中定义的变量。要执行的脚本是act.sh,而要提供的脚本是act.conf.sh,因此在act.sh中我有: source act.conf.sh 然而,这仅在包含它的目录中运行act.sh时有效,因为act.conf.sh引用放置在工作目录下的文件
在我编写的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结合使用的情况下,它将为您工作,因为你得到一个方便的错误条件,当它无法正常扩展。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读