2017-11-08 11 views
1

目的

割り当てcURLの出力からワンライナーコマンドを使用してRESPDATE変数へのHTTPステータスコードと日付。 バッシュ複数の変数代入

[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 
$ 

EDIT

期待:

はここで完全な作業のコマンドです:

$ 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 
$ 

答えて

2

curlの出力は、いくつかの0が含まれています文字、 です。そのため、出力が乱れるように見えます。 curlの後にtr -d '\r'をパイプラインに挿入してegrepの前に挿入することで、それを取り除くことができます。

RESPDATE変数を読むことは本当に重要ですか? あなたが直接、目的の形式で興味深い部分に簡単、正気、 と出力を抽出するためのAwkを使用することができます。

curl ... | tr -d '\r' | awk '/^< Date:/{ date = substr($0, 9); print "[" date "] " resp } /^< HTTP\// { resp = $3 }' 
+0

ありがとうございました!それは今働きます!私は完全な作業コマンドで私のポストを編集しました。乾杯! – sedawkgrep

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リクエストを使用します。