首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Curl命令隐藏JQ错误消息

对Curl命令隐藏JQ错误消息
EN

Stack Overflow用户
提问于 2017-12-05 04:25:26
回答 2查看 1.3K关注 0票数 0

我正在运行以下curl命令:

代码语言:javascript
复制
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

此操作的错误/输出为:

代码语言:javascript
复制
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错误找不到文件时,我如何才能使其不弹出?

EN

回答 2

Stack Overflow用户

发布于 2017-12-05 04:38:31

一种(不是很热门的)选项是将STDERR重定向到/dev/null:

代码语言:javascript
复制
jq  -r '.results[].uri' 2> /dev/null

因为很明显存在错误的可能性,所以更好的选择可能是将管道分成几个步骤,这样您就可以在此过程中根据需要处理不同的错误。

顺便说一句,这个断言表明jq本身存在某种bug。您能给我们展示一下curl的相应输出吗

票数 2
EN

Stack Overflow用户

发布于 2017-12-05 05:12:37

使用curl --fail仅在curl成功时继续运行jq命令:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47641412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档