Предостережение: И эта маленькая строка bash, и вопрос здесь предназначены для учебных целей, поскольку я понимаю, что могу «просто открыть браузер».
Если я не ошибаюсь, Google не предоставляет скрипт-дружественный способ загрузки последней версии golang. Скрипты, которые я видел (например, этот)суть) по-прежнему требуют от вас знать и вручную ввести номер версии 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, и, наконец, сохраняет первую строку вывода, которая является именно той ссылкой, которая мне нужна. Прямо сейчас: это было бы дляперейти.1.8.3.
Еще раз, это для учебных целей. Спасибо за ваше время.
РЕДАКТИРОВАТЬ:Я принял'Предложение GMaster'акак ответ, поскольку он улучшил мое решение без дополнительных инструментов. Я благодарен другим комментаторам, однако, за помощь в поиске дополнительных инструментов. Хотя я с нетерпением жду любых возможных дополнений в будущем, я посчитал, что лучше закрыть это, поскольку мой запрос был подробно рассмотрен.
решение1
Если вы посмотрите наhttps://golang.org/dl/страницу, вы увидите последние версии в Featured Downloads. Теперь, предполагая, что Google не меняет html-структуру страницы, это более чистая версия
GOURL=$(curl -s https://golang.org/dl/ | grep 'download.*downloadBox' | grep -o 'https.*linux.*gz')
решение2
Элегантность в основном субъективна. Самый простой способ следить за релизами Go — это установить часы нарелизыстраницу на GitHub, или просто добавьтерелевантный фидв ваши новостные ленты (при условии, что вы используете RSS-каналы).
Но если вам нужна команда, которая выглядит умнее, чем curl
+ grep
, вот одна из них с использованиемКсидель:
{ echo -n url=; xidel https://golang.org/dl/ -s -e '//a[./div="Source"]/@href'; } | \
curl -s -S -O -K -
Здесь xidel
извлекает соответствующий URL со страницы загрузки с помощью XPath, затем curl
загружает его. Возможно, это слишком много, но xidel
может пригодиться для других задач.
решение3
Нет необходимости в скрипте 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'в текущий каталог.