对于 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