Shell: 간단한 if 문이 작동하지 않는 것 같습니다.

Shell: 간단한 if 문이 작동하지 않는 것 같습니다.

나는 다음과 같은 쉘 스크립트 조각을 작성했습니다.

while inotifywait -e modify $ENV_LOCATION/*.env
do
  md5sum $ENV_LOCATION/*.env > ./checksums_optwo.md5
  if [ -n "$(cmp ./checksums_opone.md5 ./checksums_optwo.md5)" ]
  then
    gdialog --msgbox "The files are different"
    md5sum $ENV_LOCATION/*.env > ./checksums_opone.md5
  else
    gdialog --msgbox "The files match"
  fi
done

gdialog그런데 왜 프롬프트가 없는지 잘 모르겠습니다 . 어떤 아이디어가 있나요?

답변1

gdialog명령문의 두 분기가 모두 있으므로 종료 상태가 0인 상태로 종료하는 한 둘 중 하나가 실행됩니다 if. inotifywait감시 중인 파일 중 하나라도 삭제된 경우(그리고 삭제 이벤트를 감시하지 않는 경우) 명령은 inotifywait0이 아닌 종료 상태로 종료됩니다.

파일의 삭제 및 수정을 모니터링하려면 다음을 사용하십시오.

inotifywait -e modify -e delete_self "$ENV_LOCATION"/*.env

두 파일을 비교하고 cmp결과에 반응합니다.

if cmp -s file1 file2; then
    echo 'files are the same'
else
    echo 'files are different'
fi

관련 정보