Я новичок в bash (почти никакого опыта), и мне нужна помощь с bash-скриптом.
Я использую docker-compose для создания нескольких контейнеров — например, 2 контейнера. 2-й контейнер выполнит команду bash, но перед этим мне нужно проверить, что 1-й контейнер исправен и полностью настроен. Вместо использования команды sleep я хочу создать сценарий bash, который будет расположен во втором контейнере, и после выполнения выполните следующие действия:
- Выполнить команду и записать вывод консоли в файл
- Прочитайте этот файл и проверьте, присутствует ли строка. Команда, которую я выполню на предыдущем шаге, займет несколько секунд (5–10) секунд, и мне нужно прочитать файл после того, как он завершит выполнение. Я полагаю, я могу добавить сон, чтобы убедиться, что команда завершена, или есть лучший способ сделать это?
- Если строка отсутствует, я хочу снова выполнить ту же команду, пока не найду строку, которую ищу.
- Как только я найду строку, которую ищу, я хочу выйти из цикла и выполнить другую команду
Я узнал, как это сделать на Java, но если мне нужно сделать это в сценарии bash.
В докер-контейнерах в качестве операционной системы используется alpine, но я обновил Dockerfile, чтобы установить bash.
Я попробовал это решение, но оно не работает.
#!/bin/bash
[command to be executed] > allout.txt 2>&1
until
tail -n 0 -F /path/to/file | \
while read LINE
do
if echo "$LINE" | grep -q $string
then
echo -e "$string found in the console output"
fi
done
do
echo "String is not present. Executing command again"
sleep 5
[command to be executed] > allout.txt 2>&1
done
echo -e "String is found"