在BASH脚本中捕获curl的错误消息并检查状态

时间:2019-07-20 00:33:24

标签: bash curl

在BASH脚本中,我需要从curl中取得4件事:

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

问题是卷曲使$ m变得毫无意义。它只是将错误转储到控制台而不是m。我不希望打印任何东西,除非我回显它。而且我只想捕获错误描述。我尝试了许多变体,似乎对于此用例没有任何作用……至少在堆栈上没有任何建议。

1 个答案:

答案 0 :(得分:0)

curl向STDERR发送错误,并且{strong>不会被$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

如果您只关心错误,则也可以像本例中一样使用--fail的{​​{1}},--silent--show-errors标志:

Making curl send errors to stderr and everything else to stdout

以及有关在bash脚本中将STDERR捕获到curl的一些信息:

Bash how do you capture stderr to a variable?