Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何检查shell脚本中的两个变量是否指向同一文件夹? 如何检查shell脚本中的两个变量是否指向同一文件夹?_Linux_Bash_Shell - Fatal编程技术网

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

Linux 如何检查shell脚本中的两个变量是否指向同一文件夹? 如何检查shell脚本中的两个变量是否指向同一文件夹?,linux,bash,shell,Linux,Bash,Shell,不能仅通过比较这些变量来检查: d1=/home/ d2=/home/user/../ if [ "$d1" == "$d2" ] then echo true else echo false fi ... outputs false 让我们假设:d1和d2都是文件系统上的目录路径,并且指向同一个目录。但是,它们的书写方式不同,分别为/home/和/home/user/./。因此,简单检查相等字符串在这里不起作用 受到这个问题的启发: 在答案中: for %%A in

不能仅通过比较这些变量来检查:

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

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

... outputs false
让我们假设:
d1
d2
都是文件系统上的目录路径,并且指向同一个目录。但是,它们的书写方式不同,分别为
/home/
/home/user/./
。因此,简单检查相等字符串在这里不起作用


受到这个问题的启发:

  • 在答案中:

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

    尝试使用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"
    

    尝试使用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"
    
    man-readlink

    -f、 --规范化

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

    man-readlink

    -f、 --规范化

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



    请看一看:Shell脚本,linux。我需要在linux上执行同样的任务。@addons_zz:您的要求不清楚。您希望比较哪两个变量?假设:
    var1
    var2
    ,这两个变量都是文件系统上的目录路径,并且指向同一目录。但是,它们的书写方式不同,分别为
    /home/
    /home/./
    。因此,检查相等字符串的简单方法在这里不起作用。@addons_zz:请参阅此答案下面的注释,
    /home/
    /home/./
    从来都不是相同的。请看一看:Shell脚本,linux。我需要在linux上执行同样的任务。@addons_zz:您的要求不清楚。您希望比较哪两个变量?假设:
    var1
    var2
    ,这两个变量都是文件系统上的目录路径,并且指向同一目录。但是,它们的书写方式不同,分别为
    /home/
    /home/./
    。因此,检查相等字符串的简单方法在这里不起作用。@addons_zz:请参阅此答案下面的注释,
    /home/
    /home/./
    永远不会相同。这永远不会是真的。因为没有两个目录具有相同的索引节点号。(不允许硬链接到目录。)^^我收回这一点。对于符号链接,这将不起作用,但对于OP的情况,
    /home/user/。
    /home
    将具有相同的inode编号。
    $ls-ld/Users/jj
    drwxr-xr-x+51 jj工作人员1734 Feb 9 13:15/Users/jj
    $ls-ld/tmp/链接到jj
    lrwxr-xr-x 1 jj轮子9 Feb 9 14:59/tmp/链接到jj-/Users/jj>
    618366
    $stat-f“%i”/tmp/链接到jj/
    618366
    $
    这永远不会是真的。因为没有两个目录具有相同的索引节点号。(不允许硬链接到目录。)^^我收回这一点。对于符号链接,这将不起作用,但对于OP的情况,
    /home/user/。
    /home
    将具有相同的inode编号。
    $ls-ld/Users/jj
    drwxr-xr-x+51 jj工作人员1734 Feb 9 13:15/Users/jj
    $ls-ld/tmp/链接到jj
    lrwxr-xr-x 1 jj轮子9 Feb 9 14:59/tmp/链接到jj-/Users/jj>
    618366
    $stat-f“%i”/tmp/link to jj/
    618366
    $
    你比我快了几秒钟:-)还值得补充一点,
    readlink
    中的
    -f
    GNU
    特定的,而不是
    POSIX
    ,我在这里测试了它,它适用于我的案例
    /home/
    /home/user/./
    。即使它们是符号链接,这个答案似乎也能起作用,这将是一个额外的奖励。这是否适用于已装入的卷(例如
    mount1
    with
    /destination
    ,以及位于
    mount2
    上的符号链接with
    destination->/destination
    )?您比我快了几秒钟:-)还值得添加一条注释,
    readlink
    中的
    -f
    GNU
    特定的,而不是
    POSIX
    ,因此,我在这里测试了它,它适用于我的案例
    /home/
    /home/user/./
    。即使它们是符号链接,这个答案似乎也能起作用,这将是一个额外的好处。这是否适用于装载的卷(例如
    mount1
    with
    /destination
    ,以及
    mount2
    上的符号链接with
    destination->/destination
    )?