【发布时间】:2015-07-26 03:48:48
【问题描述】:
我有一个 bash 脚本位于 /home/http/mywebsite/bin/download.sh
我在 /home/http/mywebsite/config/config.yaml 中有一个配置文件
现在,无论我在哪里执行脚本,我都想读取 yaml 文件。
问题: 当我 cd 进入 /home/http/mywebsite/bin/ 并运行 ./download.sh 时,一切正常。
当我 cd 进入 /home/ 并运行 http/mywebsite/bin/download.sh 时,由于相对路径,它找不到配置文件。
无论我在哪里执行脚本,我如何确保始终可以读取配置文件。它总是位于 config/config.yaml 中脚本的 4 个目录
脚本如下所示:
#!/bin/bash
# This will give me the root directory of my project which is /home/http/mywebsite/
fullpath="$( cd ../"$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cat ${fullpath}config/config.yaml
如果我在脚本所在的目录中执行它,这将有效。
如果我从另一个目录(例如 /home/)执行脚本,则会收到以下错误:
cd: ../http/mywebsite/bin: No such file or directory
cat: config/config.yaml: No such file or directory
解决方案?
如果有可能使用可以遍历路径 N 次的代码 sn-p 会很棒,这将解决我的问题。但是对我来说太高级了。
例如你可以设置一个变量“cd_up=1”上升多少次。运行循环/sed 或任何魔法。
它会将绝对字符串从: /home/http/mywebsite/bin/ 进入: /home/http/mywebsite/
将其更改为 2 会将字符串更改为: /home/http/
【问题讨论】:
-
这可能与您的问题有点正交,但是您是否考虑过在您的密钥文件所在的位置设置一个环境变量?然后,您可以使用规则,例如当前目录失败该基于 env 的目录。
标签: bash