在bash中获取cURL响应

在bash中获取cURL响应,bash,curl,Bash,Curl,我有一个简单的bash脚本,可以将文件上传到FTP。我想知道如何从curl获得一个我可以记录的响应(错误还是成功) 提前感谢美元?bash变量表示上一个命令的成功(val 0)/失败(val非0)。所以你可以做: eval curl -T "${xmlFolder}"/"${xmlFile}" "${mediaFTP}" err=$? if [ $err -ne 0 ] then echo "Failed with error code $err" exit fi 根据提供的命

我有一个简单的bash脚本,可以将文件上传到FTP。我想知道如何从curl获得一个我可以记录的响应(错误还是成功)


提前感谢

美元?bash变量表示上一个命令的成功(val 0)/失败(val非0)。所以你可以做:

eval curl -T "${xmlFolder}"/"${xmlFile}" "${mediaFTP}"
err=$?
if [ $err -ne 0 ]
then
    echo "Failed with error code $err"
    exit
fi

根据提供的命令,这就足够了:

curl -T "$xmlFolder/$xmlFile" "$mediaFTP" || 
  printf '%s\n' $?
或者,如果要放弃错误消息:

curl -T "$xmlFolder/$xmlFile" "$mediaFTP" >/dev/null || 
  printf '%s\n' $?

我没有做-1(不能投票给你自己的问题)。不过,你的答案刚刚获得通过。你在这里使用
eval
有什么原因吗?看起来这只会导致文件路径中的特殊字符(如空格)错误插入。不是真的。如果我只是放下
eval
,它会正常工作吗?除非有特定的原因
eval
需要在那里(例如,其中一个变量中的某些内容需要经过额外级别的解析),否则应该将其删除
eval
作为一个bug源享有当之无愧的声誉。您能解释一下%s的作用吗?在第二段代码中使用“>/dev/null”吗?谢谢您好@RGilkes,
%s
是一个格式字符串,它告诉printf如何显示其参数(在本例中,它表示字符串)。有关更多信息,请参见
man 3 printf
。在这种情况下,需要重定向到
/dev/null
,以便放弃curl命令写入其标准输出的输出(因为在这种情况下,我们不需要它)。
curl -T "$xmlFolder/$xmlFile" "$mediaFTP" >/dev/null || 
  printf '%s\n' $?