如何检查shell脚本中的两个变量是否指向同一个文件夹?

时间:2017-02-08 05:57:27

标签: linux bash shell

如何检查shell脚本中的两个变量是否指向同一个文件夹?

仅通过比较这些变量无法检查:

d1=/home/
d2=/home/user/../

if [ "$d1" == "$d2" ]
then
    echo true
else
    echo false
fi

... outputs false

让我们假设:d1d2,它们都是文件系统上的目录路径,并指向同一目录。但是,它们的编写方式与/home//home/user/../不同。因此,检查相等字符串的简单操作在这里不起作用。

受到问题的启发:

  1. A reliable way to check if two variables in a cmd shell point to the same folder
  2. 在答案中:

    for %%A in ("%d1%") do for %%B in ("%d2%") do if "%%~fA"=="%%~fB" (echo true) else (echo false)
    

2 个答案:

答案 0 :(得分:3)

var1="/home/ps/temp/.."
var2="/home/ps/"


if [ "$(readlink -f "$var1")" == "$(readlink -f "$var2")" ];then
    echo "they are pointing to same directory...."

else

    echo "NOOOOO they are different"

fi

来自man readlink

  

-f, - canonicalize

     

通过递归地跟随给定名称的每个组件中的每个符号链接来规范化;除了最后一个组件之外的所有组件必须存在

答案 1 :(得分:1)

尝试使用stat命令报告inode编号。使用尾部反斜杠确保任何符号链接都被解除引用。

inode_1=`stat -f "%i" ../../d1/`
inode_2=`stat -f "%1" /path/to/d2/which/links/to/d1/`
[[ $inode_1 -eq $inode_2 ]] && echo "true" || echo "false"