내가 무엇을 하고 있는지 말해 보겠습니다.
저는 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
대괄호를 제거해야 합니다.