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

时间:2016-12-02 12:45:36

标签: linux bash shell

说我有一个shell脚本,它读取一个配置文件,其中包含一个相对路径作为参数 - 例如./script.sh

shell脚本读取它,当它自己运行script.sh时,它运行正常。

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

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

我最好怎么做?

1 个答案:

答案 0 :(得分:1)

你这样做:

. /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标题。