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