Câu trả lời:
Thử đi:
$ LOCATION=`curl -I http://raspberrypi.stackexchange.com/a/1521/86 | perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
$ echo "$LOCATION"
/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521#1521
URL chuyển hướng của Google hơi khác nhau. Họ trả về một chuyển hướng Javascript, có thể dễ dàng được xử lý, nhưng tại sao không xử lý URL gốc và để cuộn tròn tất cả lại với nhau?
$ URL="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFAQFjAA&url=http%3A%2F%2Fwww.raspberrypi.org%2F&ei=rv8oUODIIMvKswa4xoHQAg&usg=AFQjCNEBMoebclm0Gk0LCZIStJbF04U1cQ"
$ LOCATION=`echo "$URL" | perl -n -e '/url=([a-zA-Z0-9%\.]*)/ && print "$1\n"'`
$ echo "$LOCATION"
http%3A%2F%2Fwww.raspberrypi.org%2F
$ echo "$LOCATION" | perl -pe 's/%([0-9a-f]{2})/sprintf("%s", pack("H2",$1))/eig'
http://www.raspberrypi.org/
Có một cách thậm chí còn dễ dàng hơn
curl -w "%{url_effective}\n" -I -L -s -S $URL -o /dev/null
nó sẽ in
http://raspberrypi.stackexchange.com/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521
cho URL
http://raspberrypi.stackexchange.com/a/1521/86
curl có thể được cấu hình để theo dõi chuyển hướng và in các biến sau khi hoàn thành. Vì vậy, những gì bạn yêu cầu có thể đạt được với lệnh sau:
curl -Ls -w %{url_effective} -o /dev/null https://google.com
Trang man giải thích các tham số cần thiết như thế:
-L, --location Follow redirects (H)
-s, --silent Silent mode (don't output anything)
-w, --write-out FORMAT Use output FORMAT after completion
-o, --output FILE Write to FILE instead of stdout
hoặc thử cái này
curl -s -o /dev/null -I -w "HTTP_CODE: %{http_code}\nREDIRECT_URL: %{redirect_url}\n" http://raspberrypi.stackexchange.com/a/1521/86
curl -s -I 'http://yoururl'
và nội dung của phản hồi với curl -s 'http://yoururl'
(bạn sẽ thấy rằng google sử dụng một javascript đơn giản để chuyển hướng).
Các tham số -L (--location)
và -I (--head)
vẫn thực hiện yêu cầu CHÍNH không cần thiết cho url vị trí.
Nếu bạn chắc chắn rằng bạn sẽ có không nhiều hơn một chuyển hướng, tốt hơn là vô hiệu hóa vị trí theo dõi và sử dụng biến số curl% {redirect_url}.
Mã này chỉ thực hiện một yêu cầu CHÍNH đến URL được chỉ định và nhận redirect_url từ tiêu đề vị trí:
curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://goo.gl/QeJeQ4"