我刚刚在 redis install_server script 中遇到了一个错误 它有一个硬编码:
DEFAULT_CONFIG="../redis.conf"
因此,当运行此脚本时,不要从其自己的文件夹(例如 ./utils/install_server.sh) 脚本找不到conf 文件。
我正在寻找一种引用脚本文件夹的方法,而不依赖于脚本的调用位置。
我调查了this answer这似乎是 SO 的规范,但有些事情对我来说失败了:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $DIR
我得到:
./utils/install_server.sh: 100: ./utils/install_server.sh: Bad substitution /home/myusername/binaries/redis-2.8.3 #where I run the script from..not the folder I need
所以我想我做错了什么,或者这对我来说不是正确的答案
我知道我可以在 redis 安装脚本中添加检查文件是否存在以及更清晰的错误消息,但我宁愿让这项工作正常进行。
我很乐意提供想法,并且我会向 redis 发布 PR 来为每个人解决这个问题..
谢谢!
最佳答案
我做的事情与您发布的内容非常相似:
SCRIPT_DIR="$(cd $(dirname $0) && pwd)"
在你的情况下,BASH_SOURCE 似乎有问题。在我的方法中,我使用 $0,它始终计算为用于启动脚本的完整路径名。
我不确定您的脚本中 BASH_SOURCE 的问题是什么,因为您发布的内容对我有用。因此我只是提供一种替代方法。
关于Bash 脚本 : referencing a folder path from the script folder, 而不是我运行它的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817635/