Bash脚本:引用​​脚本文件夹中的文件夹路径,而不是我运行它的位置

时间:2013-12-28 18:01:51

标签: 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:糟糕的替换   /home/myusername/binaries/redis-2.8.3 #where我从我需要的文件夹运行脚本

所以我猜我做错了,或者这不是我的正确答案

我知道我可以添加一个检查文件是否存在以及redis安装脚本的更清晰的错误消息,但我只是让它工作。

我会为这些想法感到高兴,并且我会为了解决这个问题而为了每个人制作一个公关版本。

谢谢!

2 个答案:

答案 0 :(得分:2)

我做的事与你发布的非常相似:

SCRIPT_DIR="$(cd $(dirname $0) && pwd)"

在您的情况下,似乎BASH_SOURCE出了问题。在我的方法中,我使用$ 0,它总是计算用于启动脚本的完整路径名。

我不确定您的脚本中BASH_SOURCE的问题是什么,因为您发布的内容适用于我。因此,我只是提供另一种方法。

答案 1 :(得分:1)

您是使用bash运行此功能(即使用#!/bin/bash启动脚本还是使用bash /path/to/script运行脚本),还是使用普通sh(#!/bin/shsh /path/to/script)? BASH_SOURCE和数组([0])都是bash扩展,并且可能在通用shell中不可用。特别是,“错误替换”错误是我在尝试在不支持它们的shell中使用数组时看到的错误。