【问题标题】:Is there a simple test in Bash to test if a logical path is a directoryBash中是否有一个简单的测试来测试逻辑路径是否是目录
【发布时间】:2020-02-21 04:06:14
【问题描述】:

这个问题最好通过一个小例子来解释:

如下创建目录基础结构:

rm -rf /tmp/work  
mkdir -p /tmp/work/a/b/c  
cd /tmp/work  
ln -s a/b/c s  
mkdir t  
tree  

这会产生以下基础架构:

有一种非常简单的方法可以检查目录是否存在:

cd /tmp/work
if test -d s/../t; then echo EXISTS; else echo DOES NOT EXIST; fi

但是,“-d”测试似乎只检查物理路径(a/b/t);下面清楚地表明逻辑路径/目录确实存在:

cd s/../t
pwd

我希望通过一个简单的测试来检查这种情况... 检查 StackOverflow 中的类似问题,我还没有找到区分逻辑路径和物理路径的答案...

我做了一个蛮力(愚蠢的)尝试来获得更多的洞察力:

for o in -b -c -d -e -f -g -G -k -h -L -O -p -r -S -s -t -u -w -x; do
  if test $o s/../t; then echo EXISTS; else echo DOES NOT EXIST; fi
done

正如预期的那样,所有的测试都显示失败......

【问题讨论】:

    标签: testing directory exists


    【解决方案1】:

    我最接近简单解决方案的是以下测试:

    if (unset CDPATH; cd -L s/../t &>/dev/null); then echo EXISTS; else echo DOES NOT EXIST; fi
    

    如果使用“-P”而不是“-L”,则此语法会测试物理路径(相当于“测试 -d”)。

    请注意,如果我们确定使用的是内置函数,那么语法会简单一些:

    if (unset CDPATH; cd s/../t &>/dev/null); then echo EXISTS; else echo DOES NOT EXIST; fi
    

    但一定有更好的办法……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2021-12-31
      • 2014-01-12
      • 2011-12-04
      相关资源
      最近更新 更多