给定:
some.txt
dir
|-cat.sh
其中cat.sh包含以下内容:
cat ../some.txt
那么,在dir
中运行./cat.sh
可以很好地工作,而在与dir
相同级别上运行./dir/cat.sh
则不行。我希望这是由于不同的工作目录造成的。有没有一种简单的方法可以使路径相对于cat.sh
的位置成为../some.txt
发布于 2014-06-09 09:55:10
您要做的是获取脚本的绝对路径(可通过${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
一样。
请注意,此脚本仅在您直接调用脚本时才有效(即不通过符号链接),否则查找脚本的当前位置会变得有点棘手。)
发布于 2014-06-09 11:19:37
只有一行就行了。
cat "`dirname $0`"/../some.txt
https://stackoverflow.com/questions/24112727
复制相似问题