bash - 基于文件位置而不是当前工作目录的相对路径

标签 bash shell

<分区>

给定:

some.txt
dir
 |-cat.sh

cat.sh 的内容是:

cat ../some.txt

然后在 dir 中运行 ./cat.sh 工作正常,而在与 相同的级别上运行 ./dir/cat.sh code>dir 没有。我希望这是由于不同的工作目录。有没有一种简单的方法可以使路径 ../some.txt 相对于 cat.sh 的位置?

最佳答案

你想要做的是获取脚本的绝对路径(可通过${BASH_SOURCE[0]}获得),然后用它来获取父目录和cd 到脚本的开头。

#!/bin/bash
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )

cd "$parent_path"
cat ../some.text

这将使您的 shell 脚本独立于您从何处调用它来工作。每次运行它时,就像在 dir 中运行 ./cat.sh 一样。

请注意,此脚本仅在您直接调用脚本(即不通过符号链接(symbolic link))时才有效,否则查找脚本的当前位置会有点棘手)

关于bash - 基于文件位置而不是当前工作目录的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112727/

相关文章:

bash - shell脚本,在并行进程中运行

LINUX:如何输出 SQL 脚本中使用的表

visual-studio - 什么是 Visual Studio 2008 Shell(集成模式)?

linux - 在嵌套目录中运行脚本而不会对执行目录产生影响

shell - id_rsa.pub 由 ssh-keygen -t rsa 创建时为空

linux - Bash EOF 有意外行为

arrays - 从 Bash 数组中删除随机元素

macos - Bash脚本根据文件名查找文件并对它们进行搜索替换

linux - 从字符串中抓取特定的文本部分

linux - 将一个字符替换为 awk