【问题标题】:Capturing error message of curl in BASH script andchecking status在 BASH 脚本中捕获 curl 的错误消息并检查状态
【发布时间】:2019-07-20 08:41:22
【问题描述】:

在 BASH 脚本中我需要 curl 的 4 件事:

  • 我需要将 简短 人类可读的错误消息从 curl 捕获到 bash 变量中。
  • 我需要能够检查命令是否完成 成功与否。
  • 我需要运行命令
  • 除非我回显它,否则我不希望将任何内容打印到控制台。
m=$(curl -u "$user":AP"$pass" -T "$pathA" "$url")
if [ $? -ne 0 ] ; then
   echo "Error: ""$m"
fi

问题是 curl 将乱码放入 $m 中。它只是将错误转储到控制台而不是 m。除非我回显它,否则我不希望将任何内容打印到控制台。而且我只想捕获错误描述。我尝试了很多变体,似乎没有任何东西适用于这个用例......至少在 Stack 上没有任何建议。

【问题讨论】:

  • 您正在使用 命令替换 来捕获来自 curl 中的所有 m 输出,除非您没有捕获 stderr。在curl 命令的末尾添加2>&1,例如..."$url" 2>&1) 还有echo "Error: $m" 就足够了。
  • 没错——你应该把它作为一个答案,这样它才能被标记为正确。

标签: bash curl


【解决方案1】:

curl 将错误发送到 STDERR,并且将不会$m 捕获。 curl 的输出被发送到 STDERR(你提到的胡言乱语)。

一种解决方案是通过将2>&1 添加到您的脚本中的curl 调用来将STDERR 重定向到STDOUT:

m=$(curl -u "$user":AP"$pass" -T "$pathA" "$url" 2>&1)
if [ $? -ne 0 ] ; then
   echo "Error: ""$m"
fi

如果您只关心错误,您还可以使用curl--fail--silent--show-errors 标志,如本例所示:

Making curl send errors to stderr and everything else to stdout

还有一些关于在 bash 脚本中将 STDERR 捕获到 $variable 的信息:

Bash how do you capture stderr to a variable?

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多