Grazie, questo mi ha aiutato. Ho apportato alcuni miglioramenti e l'ho inserito in uno script helper "finalurl":
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
output a/dev/null
-I
non scaricare effettivamente, scopri solo l'URL finale-s
modalità silenziosa, nessuna barra di avanzamento
Ciò ha reso possibile richiamare il comando da altri script come questo:
echo `finalurl http://someurl/`
come un'altra opzione:
$ 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>
Ma non va oltre il primo.
curl
è -w
opzione e la sottovariabile url_effective
è quello che stai cercando.
Qualcosa come
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Ulteriori informazioni
-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
Altro
Potresti voler aggiungere -I
(che è un i
maiuscolo ), che farà sì che il comando non scarichi alcun "corpo", ma utilizza anche il metodo HEAD, che non è ciò che la domanda includeva e rischia di cambiare ciò che fa il server. A volte i server non rispondono bene a HEAD anche quando rispondono bene a GET.