Bash目录比较

时间:2014-08-01 16:07:00

标签: bash

我有一个bash脚本,它带有两个参数,一个源目录和一个输出目录。现在我正在使用一个简单的

[ $1 == $2 ]

检查重复的目录,这些目录适用于明确定义的参数。但是,根据bash文件的存在位置以及用户为args输入的内容,它可能并不总是有效并且会导致很多问题。例如,如果文件位于/opt/script/目录中,则用户可以输入

./processLogs.sh ./ /opt/script/

即使它们指向同一目录,也可以通过简单检查。您可能知道有很多方法可以导航和指向使用不同语法的目录但有没有办法确保或检查它们是否指向同一个实例?

2 个答案:

答案 0 :(得分:2)

您可以尝试将readlink -f应用于参数:

if [[ $(readlink -f "$1") == $(readlink -f "$2") ]] ; then
    echo The arguments are the same. >&2
    exit 1
fi

readlink将路径转换为规范表示并解析链接。

答案 1 :(得分:2)

您可以使用realpath

[ "$(realpath "$1")" = "$(realpath "$2")" ]

realpath打印已解析的路径,因此它也适用于./之类的内容。将变量包装在双引号中是一种很好的做法,以避免包含空格的变量出现问题。

请注意,使用[[ ]]时,== is just a synonym for =