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대괄호를 제거해야 합니다.

관련 정보