Вы пытались что-то вроде этого:
some-command &
PID=$!
wait $PID
while grep -q un-clean filename.log ; do
kill -TERM $PID
some-command &
PID=$!
wait $PID
done
процесс будет убит (см. killall: man killall) и re-run команда будет запущена, пока файл filename.log содержит строка un-clean.
Помогает ли это?
EDIT: после обновления с помощью хорошего решения @Serg и добавлена команда wait, чтобы дождаться окончания команды до проверка файла журнала.