我正在运行以下curl命令:
installer_to_delete=$(curl -s -u username:password "URL/api/search/dates?dateFields=created&from=${Two_Years_Ago}&today&repos=npm-local-lrn" | jq -r '.results[].uri'|sed 's=/api/storage==')
if [[ $installer_to_delete == "" ]]
then
echo "No installers found"
else
for installer in $installer_to_delete
do
echo $installer
done
fi
错误/输出是:
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
只要Curl命令找不到文件,它就会显示此输出。如果JQ错误找不到文件,怎么能让它弹出?
答案 0 :(得分:2)
一个(不太热)选项是将STDERR重定向到/ dev / null:
jq -r '.results[].uri' 2> /dev/null
由于显然存在错误的可能性,更好的选择可能是将管道分解为多个步骤,以便您可以在此过程中适当地处理不同的错误。
顺便说一下,这个断言表明jq本身存在某种错误。你能告诉我们curl
的相应输出吗?
答案 1 :(得分:1)
如果curl --fail
成功,则jq
仅继续运行curl
命令:
url="URL/api/search/dates?dateFields=created&from=${Two_Years_Ago}&today&repos=npm-local-lrn"
if result=$(curl -s --fail -u username:password "$url"); then
readarray -t installers < <(jq -r '.results[].uri' <<<"$result" | sed 's=/api/storage==')
if (( ${#installers[@]} )); then
for installer in "${installers_to_delete[@]}"; do
echo "$installer"
done
else
echo "Empty list of installers retrieved" >&2
fi
else
echo "HTTP error retrieving installers" >&2
fi