我正在尝试检查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
但是,当我在终端中键入它时,可以作为已检测到的
任何想法? 感谢
答案 0 :(得分:2)
您可能正在为交互式shell运行ksh
或Bash。这两者都有-p
的{{1}}选项。您的脚本运行的shell(可能是type
)有sh
但没有type
选项,因此它正在寻找“-p”作为可执行文件的名称找不到它。
因此,您可以更改脚本以使用-p
,也可以使用ksh
程序。后者可能更具可移植性,因为有些系统没有which
。
答案 1 :(得分:1)
在设置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
答案 2 :(得分:0)
您是否尝试过以下语法:
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
会返回多行,因此可以正常工作。
答案 3 :(得分:0)
if which md5sum >/dev/null 2>&1; then
md5cmd="md5sum"
elif which digest >/dev/null 2>&1; then
md5cmd="digest -a md5"
else
echo "No md5 command found" >&2
exit 1
fi
$md5cmd YOUR_FILE