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

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

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

31746閲覧

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

Meguroman

総合スコア7

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

1グッド

0クリップ

投稿2017/02/24 05:24

###前提・実現したいこと

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

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

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

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

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

bash

1$curl -Ssi http://example.com/ 2 3HTTP/1.1 200 OK 4Accept-Ranges: bytes 5Cache-Control: max-age=604800 6Content-Type: text/html 7Date: Fri, 24 Feb 2017 05:07:53 GMT 8Etag: "359670651+ident" 9Expires: Fri, 03 Mar 2017 05:07:53 GMT 10Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT 11Server: ECS (rhv/818F) 12Vary: Accept-Encoding 13X-Cache: HIT 14Content-Length: 1270 15 16<!doctype html> 17<html> 18<head> 19 <title>Example Domain</title> 20 21〜〜〜 中略 〜〜〜 22 23</div> 24</body> 25</html>

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

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

bash

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

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

bash

1$ ./test.sh 2 <!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

austr👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

bash

1$ 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 06:03

編集2017/02/24 06:05
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Meguroman

2017/02/24 07:58

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問