【发布时间】:2016-12-02 12:45:35
【问题描述】:
假设我有一个读取配置文件的 shell 脚本,其中包含一个相对路径作为参数 - 例如filePath=./file.txt
shell 脚本将其读入,当它自己运行./script.sh 时,它运行良好。
问题来了,当我有一个“菜单”脚本时,它可以调用script.sh。当我这样做时,使用. /absolute/path/to/script.sh,配置文件中的. 突然变得相对于menu.sh,而不是script.sh。即它现在在错误的目录中查找file.txt。
我无法编辑script.sh 以采用绝对路径,并且配置文件也必须保持原样;所以我需要一种方法让menu.sh 调用script.sh 并让它像直接从bash 命令行调用一样 - 以便. 保持相对于script.sh 而不是相对于menu.sh 而它正在运行。
我最好怎么做?
【问题讨论】:
-
使用当前工作目录解析相对路径,而不是正在执行的脚本的位置。
menu.sh是否在某处执行cd命令来更改工作目录? -
相关,你的配置文件应该指定不依赖于使用它的脚本状态的绝对路径,或者至少提供一个显式的基本路径,脚本可以将相对路径连接到为了得到一个绝对路径。
-
@chepner 是的,我知道这是最理想的——但这不是它的做法,所以我没有太多选择!至于您的第一点,只需 cd-ing 到与脚本相同的文件路径就可以了?
-
没有看到你的代码,我不知道怎么解决它。不过,我要指出的是,
menu.sh在尝试使用$filePath时对当前工作目录的概念与script.sh的概念不同;这就是你需要努力的地方。 -
同意;但是
menu.sh没有使用$filepath,script.sh是-但是script.sh的行为就像$filepath相对于menu.sh