说我有一个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
1}}相对于req.headers
正在运行。
我最好怎么做?
答案 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标题。