gpt4 book ai didi

bash - 引用与执行脚本有关的文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:14 29 4
gpt4 key购买 nike

在我编写的bash脚本中,我使用source来包含配置文件中定义的变量。要执行的脚本是act.sh,而要执行的脚本是source,因此在act.conf.sh中我有:

source act.conf.sh

但是,只有在包含 act.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%奏效:
必须认识到,在一般情况下,这个问题没有解决办法。您可能听说过的任何方法,以及下面将详细介绍的任何方法都有缺陷,并且只在特定情况下有效。首先也是最重要的一点是,不要依赖于脚本的位置来避免这个问题!
如果需要编写一个非常可重用的工具,那么将正确的路径作为脚本的参数将是最可靠的方法。
假设你的脚本只能从某些外壳运行,并且只需要一点点灵活性,你就可以放松一些偏执狂。看看你的选择还是不错的。有一些常见的模式,人们使用是特别有问题的。
特别是,FAQ建议避免使用非常常用的$0变量:
任何读到$0的东西都不会是防弹的,因为$0本身是不可靠的。
作为替代方案,您可以使用$BASH_SOURCE。像这样的:

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

这个解决方案也有一些注意事项。查看FAQ页面,了解不同解决方案之间的权衡。他们似乎建议将 cd$BASH_SOURCE结合使用,以防它对您有用,因为当它无法正确扩展时,您会遇到一个方便的错误情况。

关于bash - 引用与执行脚本有关的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736692/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com