linux - 独立于运行 bash 脚本的位置解析文件

标签 linux bash unix

<分区>

我有一个非常简单的脚本来读取位于不同目录中的文本文件:

IFS=$'\n' read -d '' -r -a urls < ../dat/urls.txt

从脚本所在的目录运行脚本时,这工作正常,例如)./fetch_urls

但是如果我从用户主目录或通过 cron 运行脚本,它无法解析 urls.txt 文件。例如

/home/my-user/data-transfer/fetch_urls.sh

它失败了:

line 3: ../dat/urls.txt: No such file or directory

是否有某种方法可以使其正常工作,以便始终正确解析 urls.txt 文件。或者我必须将 urls.txt 的位置作为参数传递?

最佳答案

您的文件是相对于脚本目录的。您可以通过以下方式获得它:

script_dir=$(dirname "$0")

您现在有两个解决方案:

  • 在访问 urls.txt 之前,cd 到该目录。我个人不这样做,因为它可能会破坏其他相对路径(例如命令行上给出的路径)

  • 或者,更好的是,在您的相对路径前加上该目录:

    IFS=$'\n' read -d '' -r -a urls < "$script_dir/../dat/urls.txt"
    

关于linux - 独立于运行 bash 脚本的位置解析文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54253582/

相关文章:

arrays - 在 Bash 中如何将目录列表存储到数组中(然后将它们打印出来)?

linux - 以 root 身份获取 Firefox 版本

c - 子进程中fork()后泄漏,为什么?

c - C 中 shell 命令的历史命令。从哪里开始

c++ - 如何为不同的系统配置 NetBeans/C++ 项目?

linux - 在 linux bash 中清空一个文件

python - 如何在 Python 中重用 Popen 的中间结果?

python - 从 python 运行 linux 命令

bash - OSX bash 最小化窗口

linux - 查找其他人没有读取权限的文件