你可以在一次调用中设置多个cURL --write-out变量来变量变量

时间:2016-02-20 05:23:21

标签: bash shell curl

我需要设置或访问多个cURL变量,以便稍后在脚本中访问它们。例如:

curl -s --write-out "%{http_code} | %{local_ip} | %{time_total}" "http://endpoint.com/payload"

现在我如何访问http_code或local_ip来执行将其添加到bash数组等操作?唯一的选择是将它们从响应中剔除吗?

1 个答案:

答案 0 :(得分:2)

您可以将curl命令传递给读取命令:

curl -s --write-out "write-out: %{http_code} | %{local_ip} | %{time_total}\n" "http://yahoo.com"  | \
  sed -n '/^write-out:/ s///p' | \
  while IFS='|' read  http_code local_ip time_total; 
    do 
    printf "http_code: %s\nlocal_ip: %s\ntotal_time: %s\n" $http_code $local_ip $time_total; 

    # or in an array
    curlvars=($http_code $local_ip $time_total)
    for data in "${curlvars[@]}"
      do
      printf "%s | " $data
    done
  done

我在写出字符串中添加了\n以允许将其作为一行进行处理。

sed命令从curl输出中提取写出行。

在read命令中,您可以定义分隔符并将所有已解析的字符串分配给变量。