我对 bash 很陌生(几乎没有任何经验),我需要一些关于 bash 脚本的帮助。
我正在使用 docker-compose 创建多个容器——对于这个例子,假设是 2 个容器。第二个容器将执行 bash 命令,但在此之前,我需要检查第一个容器是否可操作且已完全配置。我不想使用 sleep 命令,而是想创建一个 bash 脚本,该脚本将位于第二个容器中,一旦执行,请执行以下操作:
- 执行命令并将控制台输出记录到文件中
- 读取该文件并检查是否存在字符串。我将在上一步中执行的命令需要几秒钟(5 - 10)秒才能完成,我需要在完成执行后读取文件。我想我可以添加睡眠以确保命令完成执行,或者有更好的方法吗?
- 如果字符串不存在,我想再次执行相同的命令,直到找到我正在寻找的字符串
- 一旦我找到我正在寻找的字符串,我想退出循环并执行不同的命令
我发现了如何在 Java 中执行此操作,但如果我需要在 bash 脚本中执行此操作。
docker-containers 将 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"