Linux Shell目录测试[-d]和权限

Linux Shell目录测试[-d]和权限,linux,bash,shell,sh,ubuntu-14.04,Linux,Bash,Shell,Sh,Ubuntu 14.04,我有一个简单的shell脚本,如下所示: #!/bin/bash AMAVIS_VIRUSMAILS="/var/lib/amavis/virusmails" if [ -d "${AMAVIS_VIRUSMAILS}" ]; then echo "ok" fi /当然,var/lib/amavis及其子目录归amavis用户所有。这意味着我得到: $ ls /var/lib/amavis/virusmails ls: cannot access /var/l

我有一个简单的shell脚本,如下所示:

#!/bin/bash

AMAVIS_VIRUSMAILS="/var/lib/amavis/virusmails"

if [ -d "${AMAVIS_VIRUSMAILS}" ]; then
        echo "ok"
fi
/当然,var/lib/amavis及其子目录归amavis用户所有。这意味着我得到:

   $ ls /var/lib/amavis/virusmails
    ls: cannot access /var/lib/amavis/virusmails: Permission denied
当我作为另一个没有root或sudo权限的用户运行ls命令时

不过。如果我运行上面的shell脚本,它不会打印“ok”。换句话说,这意味着shell脚本告诉我目录不存在。这当然不是真的,它确实存在,但我只是没有访问它的权限

我得到了与#相同的结果/垃圾箱/垃圾箱

因此,我有两个问题:

  • 这是-d测试的预期和“设计”行为吗
  • 我应该如何最好地解决这个问题,以避免误报
  • 如果有什么不同的话,这是Ubuntu 14.04LTS,3.13.0-53-generic。这意味着我正在运行GNUBash,版本4.3.11(1)-发行版(x86_64-pc-linux-GNU),或dash(sh)版本0.5.7-4ubuntu1

    换句话说,这意味着shell脚本告诉我目录不存在。这当然不是真的,它确实存在,但我只是没有访问它的权限


    对。您可以判断是否不具有访问权限=>它不存在(这不是完全正确的,因为您将无法创建这样的目录,但无论如何这是另一种情况,您应该在多用户环境中处理它)

    没关系,我只是求助于检查

    $EUID -ne 0