Предостережение : И эта небольшая строка bash, и вопрос здесь предназначены для учебных целей, поскольку я понимаю, что могу «просто открыть браузер» .
Если я не ошибаюсь, Google не предоставляет удобный для скриптов способ загрузки последней версии golang. Сценарии, которые я видел (такие как этот gist ), по-прежнему требуют, чтобы вы знали и вручную вводили номер версии go.
Моей целью было проверить, могу ли я автоматически получить последнюю версию, не просматривая ее.
Мое решение действительно работает, но я бы хотел изучить более компактный и понятный способ:
GOURL=$(curl https://golang.org/dl/ 2>&1 | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | awk '/tar.gz/' | awk NR==1)
Короче говоря, оно получает все ссылки со страницы загрузки golang, очищает URL-адреса, чтобы оставить только ссылки tar.gz , и, наконец, сохраняет первую строку вывода, которая является точной ссылкой, которая мне понадобится. Прямо сейчас: это будет для go.1.8.3 .
Еще раз, это для учебных целей. Спасибо за ваше время.
РЕДАКТИРОВАТЬ: Я «принял» предложение GMaster в качестве ответа, поскольку оно улучшило мое решение без дополнительных инструментов. Однако я благодарен другим комментаторам за то, что они помогли мне найти дополнительные инструменты. Хотя я с нетерпением жду любых возможных дополнений в будущем, я решил, что лучше закрыть это, поскольку мой запрос был подробно рассмотрен.
Если вы посмотрите на страницу https://golang.org/dl/, вы увидите, что последние версии находятся в избранных загрузках. Теперь, предполагая, что Google не меняет html-структуру страницы, это более чистая версия
.GOURL=$(curl -s https://golang.org/dl/ | grep 'download.*downloadBox' | grep -o 'https.*linux.*gz')
Элегантность в основном субъективна. Самый простой способ следить за выпусками Go — установить часы на странице выпусков на GitHub или просто добавить соответствующую ленту в свои новостные ленты (, если вы повторное использование RSS-каналов, то есть ).
Но если вам нужна команда, которая выглядит более умной, чем curl
+ grep
, вот команда, использующая Xidel:
{ echo -n url=; xidel https://golang.org/dl/ -s -e '//a[./div="Source"]/@href'; } | \
curl -s -S -O -K -
Здесь xidel
извлекает соответствующий URL-адрес со страницы загрузки с помощью XPath, затем curl
загружает его. Вероятно, это слишком много, но xidel
может пригодиться для других задач.
Нет необходимости в сценарии Bash. xidel
— это все, что вам нужно для парсинга сайта golang.
И нет необходимости в curl
, если вы хотите скачать файл.
Чтобы извлечь URL-адрес последнего источника golang:
$ xidel -s "https://golang.org/dl" -e '//a[div="Source"]/resolve-uri(@href)'
#or
$ xidel -s "https://golang.org/dl" -e 'resolve-uri(//tr[td="Source"]/td/a/@href[1])'
https://golang.org/dl/go1.16.5.src.tar.gz
Конечно, вы можете скачать этот URL с помощью curl
...
$ curl -LO "$(xidel -s "https://golang.org/dl" -e '//a[div="Source"]/resolve-uri(@href)')"
...но xidel
может и это...
$ xidel -s "https://golang.org/dl" -f '//a[div="Source"]/resolve-uri(@href)' --download '.'
...который загружает 'go1.16.5.src.tar.gz' в текущий каталог.