github에서 api를 받고 싶습니다.
코드는 다음과 같습니다.
array=(link1 link2 link3 link4)
readarray -t item < <(for i in ${array[@]}
do curl -s "$i" | jq '.tag_name'
done)
그럼 나부터 갈 수 있어물건.
그러나 문제는 가져올 링크가 남아 있으면 컬이 거기에서 멈추게 된다는 것입니다.
즉시 종료하고 이전 데이터 대신 "오류"와 같은 텍스트를 인쇄하거나 종료 코드를 가져와서 오류가 발생할 경우 일부 논리를 구현할 수 있도록 해야 합니다.
이에 대한 효과적인 솔루션을 제공합니다.
답변1
한 번의 호출로 모든 URL을 읽을 수 있으며 전송 오류가 처음 감지되면 즉시 종료하는 curl
옵션을 사용할 수 있습니다 . --fail-early
연결 시간을 제한하려면 --max-time
x초 후에 각 전송 중단을 추가하세요.--connect-timeout
오류가 있는 경우 항목 배열이 비어 있으므로 확인할 수 있습니다.
urls=(link1 link2 link3 link4)
readarray -t item < <(
curl -s --fail-early --connect-timeout 10 --max-time 120 "${urls[@]}" |
jq '.tag_name')
if [ "${#item[@]}" -eq 0 ]; then
echo "Uh, failed to fetch data." >&2
exit 1
fi
답변2
curl -f
응답 코드가 400보다 크거나 같으면 즉시 종료할 수 있는 옵션이 있습니다. 또한 -w
종료 코드를 캡처하고 -o
출력을 리디렉션하여 /dev/null
콘솔에 응답이 인쇄되지 않도록 하는 옵션을 추가할 수 있습니다.
array=(link1 link2 link3 link4)
for i in "${array[@]}"
do
response=$(curl -f -w '%{http_code}' -o /dev/null "$i")
if [ "$response" -ge 400 ]; then
echo "error"
else
curl -s "$i" | jq '.tag_name'
fi
done