質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

`curl -i`の出力結果(レスポンスヘッダ)をシェルスクリプトの変数に代入したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 9,291

Meguroman

score 5

前提・実現したいこと

どなたかご存知のかたいらっしゃいましたら、ご教示頂ければ幸いです。

curlコマンド-iオプションの出力結果全てをシェルスクリプトの変数として取得したいのですが、HTML(コンテンツ)は変数に格納されるものの、レスポンスヘッダが変数に格納できません。

curlコマンド-iオプションで表示されるレスポンスヘッダまで含めてシェルスクリプトの変数として取得する方法をご教示頂ければ幸いです。

発生している問題・エラーメッセージ

通常以下のように、-iオプションによりレスポンスヘッダ+HTML(レスポンスボディ)が返ってきます。

$curl -Ssi http://example.com/

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
Date: Fri, 24 Feb 2017 05:07:53 GMT
Etag: "359670651+ident"
Expires: Fri, 03 Mar 2017 05:07:53 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (rhv/818F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1270

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

〜〜〜 中略 〜〜〜

</div>
</body>
</html>

しかし、以下のシェルスクリプトの出力では、-iオプションによって取得されるレスポンスヘッダが抜け落ちた出力となってしまいます。

▼シェルスクリプトソース

RES=$(curl -Ssi http://example.com/)
echo $RES

▼上記シェルスクリプトの出力結果

$ ./test.sh
 <!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 50px; background-color: #fff; border-radius: 1em; } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { body { background-color: #fff; } div { width: auto; margin: 0 auto; border-radius: 0; padding: 1em; } } </style> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.</p> <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>

補足情報(言語/FW/ツール等のバージョンなど)

OS: Ubuntu 16.04
シェル: bash

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

変数へのセットは正常にできていてechoの時に表示上そうなっているだけです。(改行コード(CR/LF)が関係しているようです。)
echo "$RES""で囲むとすべて表示されます。

$ RES=$(curl -Ssi http://www.google.com/)
$ echo $RES
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">・・・略・・・
$ echo "$RES"
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
・・・略・・・

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/24 16:58

    ありがとうございます!
    シェルスクリプト内で変数として保持できていること確認できました。

    お忙しい中ご回答いただき、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる