Unix:cmp 命令出现问题

Unix:cmp 命令出现问题

让我告诉你我在做什么。

我正在运行一个脚本,该脚本正在为 Linux 和 SunOS 两个系统执行基本操作系统进程。它运行的第一个目录称为 sol0。该脚本将 sol0 的输出放入临时文件中。

它看起来像这样:

-----------------------
proc    1 response time =     67
proc    2 response time =    114
-----------------------
average response time   =     90
completion_time         =    170
total idle time         =     32
percent idle time       =     18%
-----------------------

我正在编辑脚本以在当前目录中创建一个文件来存储 sol0 的输出。我希望该文件与之后每个目录的输出进行比较。

我的 cmp 命令说,即使我使用不同的名称复制了 sol0 的副本,输出也不会匹配。他们都有相同的输出!

以下是我如何使用该命令,但首先是有关我的脚本的一些详细信息。

我的变量:

STUID=$1
PATH=${PATH}\:.
TMPFILE=tempfile
GDIR=`pwd`
OSNAME=`uname -s`
LOG=${GDIR}/results/${STUID}-${OSNAME}-X.log
DATE=`date`
TT=/dev/tty
file="./"

脚本如何调用函数来运行:

(  if [ ${OSNAME} = SunOS ] ; then
    ulimit 65
    ./sim >>${TMPFILE} 2>${TMPFILE}2 &

   else
    ulimit 35
    ./sim >>${TMPFILE} 2>${TMPFILE}2 &
   fi
  )  

cmd命令:

if  [ ${STUID} = sol0 ]; then
    if  [ ${OSNAME} = SunOS ]; then 
          echo " Making SunOS compare file. " > ${TT}
          echo > ${GDIR}/compares
          echo " Created file. " > ${TT}
          cp ${TMPFILE} ${GDIR}/compares
    else
        echo " Making Linux compare file. " > ${TT}
    echo > ${GDIR}/comparel
    echo " Created file. " > ${TT}
    cp ${TMPFILE} ${GDIR}/comparel
    fi
  else
    echo " This is not sol0. " > ${TT}
  fi

  if [ ${OSNAME} = Linux ]; then
    if [ ${STUID} != sol0 ]; then
      if [ cmp ${TMPFILE} ${GDIR}/comparel ]; then
        echo "${STUID} Linux output matches the Linux output of sol0." > ${TT}
      else
        echo "${STUID} Linux output does not match the Linux output of sol0." >${TT}
      fi  
   else
      echo "This is sol0, no comparing will be done." >${TT}
   fi
  else
   echo "This is running on SunOS. " >${TT}
  fi

答案1

具体查看您的cmp命令,替换:

if [ cmp ${TMPFILE} ${GDIR}/comparel ]; then

和:

if cmp "${TMPFILE}" "${GDIR}/comparel"; then

当想要根据各种条件之一(文件存在、字符串为空等)设置退出代码时,可以使用该[命令(也称为)。test在这里,您想要根据命令的结果设置退出代码cmp,并且您没有使用test.因此,需要删除方括号。

相关内容