Gracias, eso me ayudó. Hice algunas mejoras y las envolví en un script de ayuda "finalurl":
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
salida a/dev/null
-I
en realidad no descargue, solo descubra la URL final-s
modo silencioso, sin barras de progreso
Esto hizo posible llamar al comando desde otros scripts como este:
echo `finalurl http://someurl/`
como otra opción:
$ 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>
Pero no pasa del primero.
curl
de -w
y la subvariable url_effective
es lo que estás buscando.
Algo como
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Más información
-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
Más
Es posible que desee agregar -I
(que es un i
en mayúscula ) también, lo que hará que el comando no descargue ningún "cuerpo", pero luego también usa el método HEAD, que no es lo que incluía la pregunta y corre el riesgo de cambiar lo que hace el servidor. A veces, los servidores no responden bien a HEAD incluso cuando responden bien a GET.