调用可能有2个不同名称的程序

时间:2014-01-28 14:34:16

标签: bash

我正在尝试编写一个使用'get-iplayer'的脚本,并将用于不同的发行版。在debian上它位于'/ usr / bin / get-iplayer'中,但是在centos上,例如,它位于'/ usr / bin / get_iplayer'中。

我已经能够检查它是否安装了 -

if [[ -f "/usr/bin/get-iplayer" ]] || [[ -f "/usr/bin/get_iplayer" ]]
then
    echo ;
else
    echo "$(tput setaf 1) $(tput setab 7) Error: 'get-iplayer' or 'get_iplayer' is not     installed. Please install it. $(tput sgr 0)"
fi

如果可以通过两个不同的名称知道,我怎么称呼它呢?

4 个答案:

答案 0 :(得分:5)

if [[ -x "/usr/bin/get-iplayer" ]]
then player="/usr/bin/get-iplayer"
elif [[ -x "/usr/bin/get_iplayer" ]]
then player="/usr/bin/get_iplayer"
else echo "$0: error: neither get-iplayer nor get_iplayer is installed in /usr/bin" >&2
     exit 1
fi

# Run it
"$player" ...

答案 1 :(得分:1)

测试两个路径/名称,然后在脚本中设置一个别名,指向找到的别名。将该别名用于脚本的其余部分。

答案 2 :(得分:1)

非常类似于Jonathan Leffler的回答,但是使用shell函数而不是参数扩展:

get_iplayer () {
    if [[ -x "/usr/bin/get-iplayer" ]]
    then /usr/bin/get-iplayer "$@"
    elif [[ -x "/usr/bin/get_iplayer" ]]
    then /usr/bin/get_iplayer "$@"
    else echo "$0: error: neither get-iplayer nor get_iplayer is installed in /usr/bin" >&2
    exit 1
    fi
}

答案 3 :(得分:0)

Debian实际上同时拥有get-iplayerget_iplayerget_iplayer是脚本的真实名称。 Debian添加了符号链接get-iplayer,因为带连字符的名称符合其包命名约定(因此包的名称)。您应该可以在任何系统上使用get_iplayer,因为这是上游规范名称,改变它是不好的做法。