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 的下载页面获取所有链接,清理网址以仅保留 tar.gz 的网址,最后保留输出的第一行,这正是我需要的链接。现在:这将是为了去.1.8.3

再次强调,这是出于学习目的。谢谢你的时间。

编辑:我接受'GMaster的建议作为答案,因为它在没有额外工具的情况下改进了我的解决方案。不过,我很感谢其他评论者帮助我发现额外的工具。尽管我热切地期待着将来任何可能的补充,但我认为最好关闭它,因为我的请求已得到充分解决。

答案1

如果你看一下https://golang.org/dl/页面,您将在精选下载中看到最新版本。现在,假设 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使用XPath从下载页面提取相关URL,然后curl下载。在这里可能有点矫枉过正,但xidel对于其他任务可能会派上用场。

答案3

不需要 Bash 脚本。xidel这就是解析 golang 网站所需的一切。如果您想下载文件,
则不需要任何一个。curl

提取最新 golang 源代码的 url:

$ 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

您当然可以使用以下网址下载此网址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'到当前目录。

相关内容