ありがとう、それは私を助けました。いくつかの改善を行い、それをヘルパー スクリプト "finalurl" でラップしました:
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
/dev/null
に出力-I
実際にダウンロードするのではなく、最終的な URL を見つけるだけ-s
サイレント モード、プログレスバーなし
これにより、次のように他のスクリプトからコマンドを呼び出すことが可能になりました:
echo `finalurl http://someurl/`
別のオプションとして:
$ curl -i http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 19 Jun 2010 04:15:10 GMT
Expires: Mon, 19 Jul 2010 04:15:10 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
しかし、それは最初のものを通り過ぎません。
curl
の -w
オプションとサブ変数 url_effective
のようなもの
curl -Ls -o /dev/null -w %{url_effective} http://google.com
詳細
-L Follow redirects -s Silent mode. Don't output anything -o FILE Write output to <file> instead of stdout -w FORMAT What to output after completion
もっと
-I
を追加するとよいでしょう (つまり、大文字の i
)同様に、コマンドが「本文」をダウンロードしないようにしますが、HEADメソッドも使用します。これは、質問に含まれるものではなく、サーバーの動作を変更するリスクがあります。サーバーは、GET に正常に応答する場合でも、HEAD に適切に応答しないことがあります。