在bash中获取cURL响应

问题描述:

我有一个简单的bash脚本,可以将文件上传到FTP。我想知道如何得到curl的回应,我可以记录(错误或成功)?在bash中获取cURL响应

eval curl -T "${xmlFolder}"/"${xmlFile}" "${mediaFTP}" 

在此先感谢

+0

是否有一个原因,你在这里使用'eval'?它看起来会导致文件路径中的特殊字符(例如空格)错误分析。 –

+0

不是。如果我放弃'eval',它会正常工作? – RGilkes

+0

除非有'eval'需要存在的特定原因(例如其中一个变量中的某些内容需要经过额外的解析级别),否则应该将其删除。 “eval”作为错误的来源有着当之无愧的声誉。 –

鉴于命令提供的,这应该足够了:

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

或者,如果你想放弃的错误消息:

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

你能解释%s干什么吗?和“>/dev/null”在你的第二位代码?谢谢! – RGilkes

+0

Hi @RGilkes,'%s'是一个格式化字符串,它告诉printf如何显示它的参数(在本例中它意味着字符串)。有关更多信息,请参见man 3 printf。 在这种情况下,为了丢弃_c​​url_命令写入其标准输出的输出(因为在这种情况下,我们不需要它),必须重定向到'/ dev/null'。 –

的$? bash变量表示前一个命令的成功(val 0)/失败(val non 0)。所以,你可以这样做:

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

小心解释-1? – jman

+1

我没有做-1(不能投票你自己的问题)。只是投了你的答案,但。 – RGilkes