检查一个程序是否存在于bash中

我正在尝试检查solaris上是否存在md5sum或摘要,并在不同的机器上使用脚本。

这里是sh脚本中的函数,它由ksh脚本调用

getMD5cmd ()
{
    PATH="${PATH}:/bin:/usr/bin:/usr/sfw/bin:/usr/local/bin:/usr/sbin/bin"
    if type -p md5sum;then
        MD5CMD=`type -p md5sum`
    elif type -p digest;then
        MD5CMD="`type -p digest` -a md5"
    fi
    echo "HERE ${MD5CMD}"
}

当我运行我得到的脚本

-p not found
md5sum not found
-p not found
digest is /bin/digest
HERE

但是,当我在终端中输入时,按照所述方式工作

有任何想法吗? 谢谢



当你设置PATH时,知道命令在哪里似乎是不必要的。

getMD5cmd ()
{
    PATH=${PATH}:/bin:/usr/bin:/usr/sfw/bin:/usr/local/bin:/usr/sbin/bin
    md5sum /dev/null >/dev/null 2>&1 && MD5CMD=md5sum || MD5CMD="digest -a md5"
    echo "HERE ${MD5CMD}"
}
getMD5cmd

你有没有尝试过下面的语法:

MD5CMD="$(type -p md5sum digest |sed -e 's/digest$/digest -a md5/' |head -1)"
if [ -z "$MD5CMD" ]; then
    echo 'no md5 sum command found' >&2
    exit 1
fi
echo "HERE $MD5CMD"

我在Cygwin中尝试过这种方法, type会返回多行,所以它可以工作。

链接地址: http://www.djcxy.com/p/9789.html

上一篇: Check if a program exists in bash

下一篇: Memory leak detection for mixed mode projects: managed, unmanaged and native