使用单行命令将cURL输出的HTTP状态代码和日期分配给RESP
和DATE
变量。
[08 Nov 2017 19:28:44 GMT] 301
$ read -d "\n" RESP DATE <<< $(curl -sv https://google.com 2>&1 | egrep -i "< HTTP/2|< Date" | sed "s/< HTTP\/2 //;s/< date: //g"); echo "[$DATE] $RESP"
[
] 30108 Nov 2017 19:28:44 GMT
$
编辑:
这是完整的工作命令:
$ read -d "\r" RESP DATE <<< $(curl -sv https://google.com 2>&1 | tr -d "\r" | egrep -i "< HTTP/2|< Date" | sed "s/< HTTP\/2 //;s/< date: //g"); echo "[$DATE] $RESP"
[Wed, 08 Nov 2017 19:57:33 GMT] 301
$
答案 0 :(得分:2)
curl
的输出包含一些\r
个字符,
这就是为什么输出看起来搞砸了。
您可以在tr -d '\r'
之后和curl
之前向管道中插入egrep
来摆脱它。
阅读RESP
和DATE
变量是否真的很重要?
您可以使用Awk提取更有趣的部分更简单,更安全,
并以所需格式直接输出:
curl ... | tr -d '\r' | awk '/^< Date: / { date = substr($0, 9); print "[" date "] " resp } /^< HTTP\// { resp = $3 }'
答案 1 :(得分:2)
awk怎么样:
curl --silent --head https://google.com | awk '
/^HTTP/ {code = $2}
/^Date:/ {
sub(/\r$/,"")
date = substr($0,7)
printf "[%s] %s\n", date, code
exit
}
'
使用HTTP HEAD
请求来最小化流量。