Díky, to mi pomohlo. Udělal jsem několik vylepšení a zabalil to do pomocného skriptu „finalurl“:
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
výstup na/dev/null
-I
ve skutečnosti nestahujte, pouze zjistěte konečnou adresu URL-s
tichý režim, žádné ukazatele průběhu
To umožnilo volat příkaz z jiných skriptů, jako je tento:
echo `finalurl http://someurl/`
jako další možnost:
$ 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>
Ale nepřekročí to první.
curl
's -w
volba a podproměnná url_effective
je to, co hledáte.
Něco jako
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Více informací
-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
Další
Možná budete chtít přidat -I
(to je velké i
), což způsobí, že příkaz nebude stahovat žádné "tělo", ale pak také používá metodu HEAD, což není to, co otázka obsahovala, a riskuje změnu toho, co server dělá. Někdy servery nereagují dobře na HEAD, i když reagují dobře na GET.