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

在BASH脚本中捕获curl的错误消息并检查状态,bash,curl,Bash,Curl,我需要从BASH脚本中的curl中获得4样东西: 我需要将curl中的人类可读的错误消息捕获到bash变量中 我需要能够检查命令是否完成 成功与否 我需要命令才能运行 我不希望任何东西打印到控制台,除非我回显它 问题是curl把胡言乱语变成了m美元。它只是将错误转储到控制台,而不是m。我不希望任何东西打印到控制台,除非我回显它。我只想捕捉错误描述。我尝试了许多变体,但在这个用例中似乎没有任何效果。。。堆栈上至少没有任何建议。curl将错误发送到STDERR,并且不会被$m捕获。curl的输出

我需要从BASH脚本中的curl中获得4样东西:

  • 我需要将curl中的人类可读的错误消息捕获到bash变量中
  • 我需要能够检查命令是否完成 成功与否
  • 我需要命令才能运行
  • 我不希望任何东西打印到控制台,除非我回显它

问题是curl把胡言乱语变成了m美元。它只是将错误转储到控制台,而不是m。我不希望任何东西打印到控制台,除非我回显它。我只想捕捉错误描述。我尝试了许多变体,但在这个用例中似乎没有任何效果。。。堆栈上至少没有任何建议。

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

一种解决方案是将STDERR重定向到STDOUT,方法是在脚本中的
curl
调用中添加
2>&1

m=$(curl -u "$user":AP"$pass" -T "$pathA" "$url" 2>&1)
if [ $? -ne 0 ] ; then
   echo "Error: ""$m"
fi
您还可以使用
--fail
--silent
--show errors
标记,如本例所示,如果您只关心错误:

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

您正在使用命令替换从
m
中的
curl
捕获所有输出,除非您没有捕获
stderr
。在
curl
命令的末尾添加
2>&1
,例如
..“$url”2>&1)
还有
echo“Error:$m”
就足够了。没错,你应该给出一个答案,这样就可以将其标记为正确。
m=$(curl -u "$user":AP"$pass" -T "$pathA" "$url" 2>&1)
if [ $? -ne 0 ] ; then
   echo "Error: ""$m"
fi