Bash 脚本 : referencing a folder path from the script folder, 而不是我运行它的地方

标签 bash shell redis

我刚刚在 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/

相关文章:

bash - 通过 bash 过滤 json - 不区分大小写

linux - 着色尾输出 bash

bash - Sed 就地编辑

linux - Shell for 循环,在声明处停止

git --version 在终端上显示错误的版本

unix - 为什么这个 xargs 不起作用?

jquery - 在 Flask 中创建一个不返回响应的 View 函数

bash - 实际的 bash 字符串存储 awk 源

amazon-web-services - 我可以在不停机的情况下升级 Elasticache Redis 引擎版本吗?

shell - yum update 在脚本中调用时忽略排除