在 bash 中循环执行特定输出的命令

在 bash 中循环执行特定输出的命令

我正在创建一个简单的 bash 脚本,我们如何等待特定的输出字符串,然后只移动脚本?我尝试了以下方法,但它不起作用

while  [ "$(cat abcd.txt)" != "ocid1.vnic" ]; do cat abcd.txt ;done;

输出在 start 中包含上述字符串,这是常见的。它可以是任何类似的东西

ocid1.vnic-fdhvndivfudsvu
ocid1.vnic.fjufghug
ocid1.vnic=dugjfjg

在这种情况下有人可以帮助我吗:)

答案1

要查找以 开头的行ocid1.vnic并重复直到出现一行,我可能会使用grep而不是在 shell 中执行此操作:

while ! grep -qe '^ocid1.vnic' abcd.txt; do
    sleep .1
    printf .
done

条件部分检查 的反向退出状态grep,当找到匹配时返回一个真值。我添加了sleep以避免文件中出现繁忙循环,并且 在printf那里只是为了让您可以看到正在发生的事情;您可以安全地将其删除。

每次都会重新读取整个文件,因此即使文件被截断和重写,它也会捕获预期的行。我不确定您的情况是否会发生这种情况,但除非文件很大,否则可能不值得费心去阅读新部分。如果你愿意,你可以这样tail -f abcd.txt让 Bash 脚本在继续之前等待状态消息

相关内容