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