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/頁面,您將在精選下載中看到最新版本。現在,假設 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'到目前目錄。

相關內容