检查一个程序是否存在于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
会返回多行,所以它可以工作。
上一篇: Check if a program exists in bash
下一篇: Memory leak detection for mixed mode projects: managed, unmanaged and native