轮询命令的正确输出

轮询命令的正确输出

对于 bash 来说是全新的,所以非常感谢任何帮助。我正在寻找一个执行以下操作的脚本,它是一个非常简单的脚本,但我似乎无法得到它:

  • 我想运行一个命令,该命令将返回成功的或输出中的其他字符串。
  • 如果输出才不是包含这个词成功的我希望它休眠 5 分钟,然后再次运行,直到它包含成功的

它看起来像这样

until (SOMECOMMAND) &> /dev/null
do
    if(SOMECOMMAND contains successful);
    break;
    else sleep 300
done

echo -e "\nThe command was successful."

答案1

你可以这样做:

#!/bin/bash

output=
count=0

until [[ $output =~ successful ]]; do
    output=$(somecommand 2>&1)
    ((count++))
    sleep 300
done

printf '\n%s\n' "Command completed successfully after $count attempts."

这将检查输出是否包含成功,如果你想检查输出是否是确切地“成功”您可以将 更改=~==

$( ... )命令替换它用于将参数设置output为...的输出somecommand

答案2

运行 some-command 直到它向 stdout 输出字符串“successful”,并在运行失败后休眠五分钟:

until some-command | grep -q successful
do
  sleep $((60 * 5)) ### or "sleep 5m", if supported by your version of sleep
done

相关内容