Я получаю файл журнала, как только запускаю одну команду (процесс все еще выполняется в фоновом режиме). Теперь я хочу получить статус (чистый или не чистый) из этого файла журнала. Если статус чистый, то я оставлю процесс как есть, если он не очищен, тогда мне придется убить процесс, который был запущен моей первой командой, и снова запустить эту же команду.
Я пытался с cat logfilename | grep "un-clean"
. Но я не знаю, как проверить этот вывод в сценарии оболочки.
Я хочу что-то вроде (примерно) var= clean then the output of above command == var if yes then echo "ok" else re-run command
Я пробовал некоторые из команд, но не работает для меня.
В основном Вы хотите эту структуру
if grep -q "un-clean" /path/to/log_file.log ;
then
# put some command in case we find result is unclean
else
# if the output is ok, do something else
fi
Все, что это делает, к тихо (не печатая для экранирования) проверка, если существует соответствие строки, "грязной" в файле. Если существует, мы делаем, если часть, иначе - мы действительно еще отделяемся.
Вот пример:
$> if grep -q 'root' /etc/passwd ; then echo "This user exists" ; else echo "This user doesn't exist"; fi
This user exists
$> if grep -q 'NOEXIST' /etc/passwd ; then echo "This user exists" ; else echo "This user doesn't exist"; fi
This user doesn't exist
То, что также может быть сделано, должно запустить команду, которую Вы хотите от сценария, но в фоне. Тем путем мы можем иметь, это - PID. Вот то, что я имею в виду
$> echo "HelloWorld" &
[1] 6876
Добавление &
причины echo "HelloWorld"
выполненный в фоне, и мы имеем, это - PID, сохраненный в $!
переменная. Таким образом мы можем сделать что-то как,
some-command &
CMD_PID=$!
if grep -q "un-clean" /path/to/log_file.log ;
then
kill -TERM $CMD_PID
else
# if the output is ok, do something else
fi
Сделал Вы пробуете что-то как этот:
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
.
это помогает?
РЕДАКТИРОВАНИЕ: отправьте обновленное использование хорошего @Serg решения, и добавил эти wait
команда для ожидания конца команды прежде, чем проверить файл журнала.