Unix: Problema com o comando cmp

4

Deixe-me dar uma ideia do que estou fazendo.

Estou executando um script que está executando processos básicos do SO para dois sistemas Linux e SunOS. Bem, o primeiro diretório que é executado é chamado de sol0. O script coloca a saída de sol0 em um arquivo temporário.

Parece assim:

-----------------------
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%
-----------------------

Estou editando o script para criar um arquivo no diretório atual que armazena a saída do sol0. Eu quero que o arquivo para comparar com a saída de todos os diretórios depois disso.

Meu comando cmp diz que nenhuma das saídas corresponde mesmo quando eu fiz uma cópia do sol0 com um nome diferente. Ambos têm a mesma saída!

Aqui está como eu estou usando o comando, mas primeiro alguns detalhes sobre o meu script.

Minhas Variáveis:

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

Como o script está chamando a função a ser executada:

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

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

O comando 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
    
por user2419571 01.02.2015 / 22:29

1 resposta

3

Olhando especificamente para o seu comando cmp , substitua:

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

Com:

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

Um usa o comando [ (também conhecido como test ) quando se deseja definir um código de saída de acordo com uma das várias condições (um arquivo existe, uma string está vazia, etc.). Aqui, você deseja definir um código de saída com base no resultado do comando cmp e não tem nenhum uso para test . Portanto, os colchetes precisam ser removidos.

    
por 01.02.2015 / 23:01