我试图找出如何使我的bash脚本工作。我有以下命令:
curl http://192.168.1.2/api/queue | grep -q test
我需要重复它,直到pipline中的第一个命令成功(意味着服务器响应)并且第二个命令失败(意味着找不到模式或队列为空)。我尝试了很多种组合,但似乎无法得到它。我查看了使用$PIPESTATUS
,但无法让它按照我想要的循环运行。我尝试过各种各样的变化,但无法让它发挥作用。这就是我目前正在尝试的:
while [[ "${PIPESTATUS[0]}" -eq 0 && "${PIPESTATUS[1]}" -eq 1 ]]
do curl http://192.168.1.2 | grep -q regular
echo "The exit status of first command ${PIPESTATUS[0]}, and the second command ${PIPESTATUS[1]}"
sleep 5
done
答案 0 :(得分:0)
虽然curl调用返回的是什么类型的输出并不是很清楚,但也许你正在寻找这样的东西:
curl --silent http://192.168.1.2 |while read line; do
echo $line |grep -q regular || { err="true"; break }
done
if [ -z "$err" ]; then
echo "..All lines OK"
else
echo "..Abend on line: '$line'" >&2
fi
答案 1 :(得分:0)
想出来。只需重新概念化它。我无法通过while或until循环严格地解决它,但是当条件满足时,创建一个无限循环并突破它。
while true
do curl http://192.168.1.2/api/queue | grep -q test
case ${PIPESTATUS[*]} in
"0 1")
echo "Item is no longer in the queue."
break;;
"0 0")
echo "Item is still in the queue. Trying again in 5 minutes."
sleep 5m;;
"7 1")
echo "Server is unreachable. Trying again in 5 minutes."
sleep 5m;;
esac
done