Se o rm estiver sendo executado a partir desse script, não há nada errado com sua lógica.
É provavelmente um problema de tempo em que o arquivo é criado no diretório, mas não é preenchido quando o script executa o comando ldap. Tente adicionar um cat
do arquivo para ver. Em seguida, tente aguardar um evento close_write
no diretório, para ter um arquivo totalmente preenchido. Isso também pode não ser suficiente, pois depende de como você escreve no arquivo. Geralmente, a maneira mais segura é criar um arquivo temporário em outro lugar, em seguida, movê-lo para o lugar quando totalmente preenchido, já que essa é uma operação do sistema de arquivos mais atômica.
Além disso, adicionar uma verificação de erros para os arquivos que você espera ou comandos também é uma boa ideia:
#!/usr/bin/env bash
dir="/home/myuser/newldif/"
file="user.ldif.tmp"
ldf="$dir/$file"
while inotifywait -e close_write "$dir"; do
# Check if the file we want exists in the directory being monitored.
if [ ! -f $ldf ]; then
echo "No file [$ldf]";
continue;
fi
# Add users via ldap
echo "Adding users:"
mv $ldf $dir/user.ldif
ldapadd -w "ldappassword" -D "cn=Manager,dc=mydomain,dc=com" -f $dir/user.ldif || echo "failed adding users" && exit 1
# Remove file when done
echo "Removing file"
rm $dir/user.ldif || echo "failed removing file" && exit 1
done