检查bash命令是否指定了modificator

时间:2013-04-10 08:52:03

标签: bash

在配置Symfony 2项目期间,需要为cachelog目录设置适当的权限。

文档说要以两种方式完成。其中一个是使用setfacl修饰符调用-m命令。但是并非每个版本都包含此修改器。是否可以检查此命令或任何其他命令是否允许设置某些修改器?

例如,使用以下伪代码:

if [ checkmods --command=setfacl --modificator=-m ]
  setfacl -m ....
else
  chmod ...

1 个答案:

答案 0 :(得分:1)

您可以通过运行setfacl --help来解析使用情况信息,并检查是否包含修改器。例如:

if setfacl --help | grep -q -- -m,
then
    echo "setfacl -m supported"
else
    echo "setfacl -m not supported"
fi

如果要对任何具有--help选项的命令执行此操作,请查看bash-completion文件中可用的_parse_help函数。

http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=blob;f=bash_completion

# Parse GNU style help output of the given command.
# @param $1  command; if "-", read from stdin and ignore rest of args
# @param $2  command options (default: --help)
#
_parse_help()
{
    eval local cmd=$( quote "$1" )
    local line
    { case $cmd in
        -) cat ;;
        *) LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1 ;;
      esac } \
    | while read -r line; do

        [[ $line == *([ $'\t'])-* ]] || continue
        # transform "-f FOO, --foo=FOO" to "-f , --foo=FOO" etc
        while [[ $line =~ \
            ((^|[^-])-[A-Za-z0-9?][[:space:]]+)\[?[A-Z0-9]+\]? ]]; do
            line=${line/"${BASH_REMATCH[0]}"/"${BASH_REMATCH[1]}"}
        done
        __parse_options "${line// or /, }"

    done
}