警告: この小さな 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 スクリプトは必要ありません。golangxidel
の Web サイトを解析するために必要なのはこれだけです。ファイルをダウンロードする場合は、どちらも
必要ありません。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
もちろん、この 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'現在のディレクトリに。