Скрипт bash: более элегантный способ получить самую последнюю версию go?

Скрипт bash: более элегантный способ получить самую последнюю версию go?

Предостережение: И эта маленькая строка 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'в текущий каталог.

Связанный контент