Shell: simples se a declaração não estiver funcionando

0

Eu escrevi este trecho de script de 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

No entanto, não consigo entender por que gdialog não é solicitado. Alguma idéia?

    
por Jordi 04.07.2018 / 11:28

1 resposta

2

Você tem gdialog em ambas as ramificações da instrução if , portanto, uma delas será executada enquanto inotifywait sair com um status de saída zero. O comando inotifywait sairá com um status de saída diferente de zero se algum dos arquivos que estão sendo assistidos for excluído (e você não estiver assistindo a eventos de exclusão).

Para assistir à exclusão e modificação de qualquer um dos arquivos, use

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

Para comparar dois arquivos com cmp e reagir ao resultado:

if cmp -s file1 file2; then
    echo 'files are the same'
else
    echo 'files are different'
fi
    
por 04.07.2018 / 11:33