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

Предостережение : И ​​эта небольшая строка 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 в качестве ответа, поскольку оно улучшило мое решение без дополнительных инструментов. Однако я благодарен другим комментаторам за то, что они помогли мне найти дополнительные инструменты. Хотя я с нетерпением жду любых возможных дополнений в будущем, я решил, что лучше закрыть это, поскольку мой запрос был подробно рассмотрен.

0
01.06.2017, 18:40
3 ответа

Если вы посмотрите на страницу https://golang.org/dl/, вы увидите, что последние версии находятся в избранных загрузках. Теперь, предполагая, что Google не меняет html-структуру страницы, это более чистая версия

.
GOURL=$(curl -s https://golang.org/dl/ | grep 'download.*downloadBox' | grep -o 'https.*linux.*gz')
2
28.01.2020, 02:33

Элегантность в основном субъективна. Самый простой способ следить за выпусками 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может пригодиться для других задач.

2
28.01.2020, 02:33

Нет необходимости в сценарии 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' в текущий каталог.

1
05.06.2021, 23:36

Теги

Похожие вопросы