Bash 从Curl命令隐藏JQ错误消息

Bash 从Curl命令隐藏JQ错误消息,bash,curl,jq,Bash,Curl,Jq,我正在运行以下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 == ""

我正在运行以下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错误在找不到文件时不弹出?

一个(不太热)选项是将STDERR重定向到/dev/null:

jq  -r '.results[].uri' 2> /dev/null
由于存在明显的错误可能性,更好的选择可能是将管道分解为多个步骤,以便您可以在处理过程中适当地处理不同的错误

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

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

jq  -r '.results[].uri' 2> /dev/null
由于存在明显的错误可能性,更好的选择可能是将管道分解为多个步骤,以便您可以在处理过程中适当地处理不同的错误

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

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

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
url=“url/api/search/dates?dateFields=created&from=${2年前}&today&repos=npm local lrn”
如果结果=$(curl-s--fail-u用户名:密码“$url”);然后
readarray-t安装程序使用
curl--fail
仅在
curl
成功时继续运行
jq
命令:

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
url=“url/api/search/dates?dateFields=created&from=${2年前}&today&repos=npm local lrn”
如果结果=$(curl-s--fail-u用户名:密码“$url”);然后

readarray-t安装程序
sed
此处不需要--
jq
可以在内部进行字符串替换。无需
sed
此处--
jq
可以在内部进行字符串替换。