在BASH脚本中,我需要curl中的4项内容:
- 我需要将brief人类可读的错误消息从curl捕获到bash变量中。
- 我需要能够检查命令是否成功完成。
- 我需要命令来运行
- 我不希望任何东西打印到控制台,除非我回显它。
m=$(curl -u "$user":AP"$pass" -T "$pathA" "$url")
if [ $? -ne 0 ] ; then
echo "Error: ""$m"
fi
问题是curl把乱码放到了$m中。它只是把错误转储到控制台而不是m。我不想把任何东西打印到控制台,除非我回显它。而且我只想捕获错误描述。我尝试了很多变体,似乎没有什么适合这个用例...至少在Stack上没有任何建议。
2条答案
按热度按时间xuo3flqw1#
curl
将错误发送到STDERR,并且不会被$m
捕获。curl
的输出被发送到STDERR(您提到的乱码)。一种解决方案是通过在脚本中的
curl
调用中添加2>&1
,将STDERR重定向到STDOUT:如果您只关心错误,也可以使用
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?
neekobn82#
类似于一个建议;我只是使用输出stderror,因为$?始终为0。