【问题标题】:How to get directory permissions without backtick evaluation?如何在没有反引号评估的情况下获得目录权限?
【发布时间】:2013-02-28 13:22:37
【问题描述】:

我正在更新 z/OS 中的 Bash 脚本。当前脚本使用反引号命令的结果来测试某个条件,如下所示:

var=`command`
[test value of var]

问题在于一位客户无权访问 /tmp 目录,而 z/OS 使用 /tmp 中的文件来保存反引号命令的中间数据。

我想我可以在反引号命令之前对 /tmp 可访问性进行测试,并相应地更改脚本的行为。不过,我没有找到这样做的好方法。有什么建议吗?

【问题讨论】:

    标签: bash file permissions


    【解决方案1】:

    在 bash 中,您可以使用内置的 test 来测试文件权限。

    所以你可以使用test -d /tmp 来检查/tmp 是否是一个目录,或者使用test -w /tmp 来测试/tmp 是否对你是可写的。

    您还可以将[ 用作test 的同义词,如

    if [ -d /tmp -a -w /tmp ] ; then 
        echo "/tmp is a directory and writable"
    fi
    

    在 bash 中查看 help test。它解释了所有可用的测试。

    另一件事:有时可以告诉程序将哪个目录用于临时数据,例如sort -T /home/user/tmp,有时它们会遵循TMPDIR 环境变量。取决于您在反引号中执行的程序。

    【讨论】:

      【解决方案2】:

      if [[ -w /tmp ]]... 将测试当前用户是否具有对/tmp 的写入权限。

      可能还有另一种选择。我没有 z/OS,但是一些 UNIX 有一个变量 TMPDIR 可以设置为一个临时目录,例如:

      export TMPDIR="$HOME"
      

      可能会奏效。

      另一方面,反引号通常被视为已弃用。请改用var=$(command)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-06
        • 2019-10-06
        • 1970-01-01
        • 2021-01-05
        • 2012-08-27
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        相关资源
        最近更新 更多