Shell:简单的 if 语句似乎不起作用

Shell:简单的 if 语句似乎不起作用

我写了这个 shell 脚本片段:

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的语句的两个分支都有if,因此只要inotifywait以零退出状态退出,其中之一就会运行。如果正在监视的任何文件被删除(并且您没有监视删除事件),该inotifywait命令将以非零退出状态退出。

要监视任何文件的删除和修改,请使用

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

相关内容