gpt4 book ai didi

linux - 嵌套 shell 脚本中的相对路径 - 我只能编辑调用脚本

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:03 24 4
gpt4 key购买 nike

假设我有一个读取配置文件的 shell 脚本,其中包含一个相对路径作为参数 - 例如filePath=./file.txt

shell脚本读入这个,自己运行./script.sh时,运行正常。

问题来了,当我有一个可以调用 script.sh 的“菜单”脚本时。当我这样做时,使用 。/absolute/path/to/script.sh,配置文件中的.突然变成相对于menu.sh,而不是script。嘘。即它现在在错误的目录中查找 file.txt

我无法编辑 script.sh 来采用绝对路径,配置文件也必须保持原样;所以我需要一种方法让 menu.sh 调用 script.sh 并让它像直接从 bash 命令行调用一样 - 所以 . 在运行时相对于 script.sh 而不是相对于 menu.sh

我最好怎么做?

最佳答案

你正在这样做:

. /absolute/path/to/script.sh

如何做:

(cd /absolute/path/to;. script.sh)

它不是严格等效的,因为它创建了一个子 shell,并且在 script.sh 中创建/修改的所有变量都将在退出时丢失,但除此之外会执行您想要的操作。

要将命令的结果存储在变量中,只需执行以下操作:

result=$(cd /absolute/path/to;. script.sh)

编辑:源/点方法的问题在于,如果被调用的脚本退出,它会退出当前脚本。为避免这种情况(如果您不寻找副作用,只需替换为:

(cd /absolute/path/to;script.sh)

(cd /absolute/path/to;bash script.sh)

如果 script.sh 没有正确的 bash shebang header 。

关于linux - 嵌套 shell 脚本中的相对路径 - 我只能编辑调用脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932565/

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