カールを使用してファイル名とパスが可変のGithubファイルダウンロードスクリプトを作成する

カールを使用してファイル名とパスが可変のGithubファイルダウンロードスクリプトを作成する

インストールスクリプトを作成する必要があります。デジタル海コマンドラインインターフェイス文書「ツールジタブ使用カールしかし、問題があります。ファイル名はバージョン番号によって変更されるため、ハードコーディングでは新しいバージョンがリリースされるたびにスクリプトを編集する必要があるため、自動化ポイント全体が無効になります。

変数ディレクトリとファイル名へのパスに単にアスタリスク(または一部では「アスタリスク」と呼ばれる)を使用することは機能しません。

私が使うべきパス:

https://github.com/digitalocean/doctl/releases/download/v1.15.0/doctl-1.15.0-linux-amd64.tar.gz

ご覧のとおり、ファイルがあるディレクトリもバージョン番号によって異なります。

私は問題を解決する方法を示しますが、それは最もエレガントな解決策ではないかもしれません。もっと簡単なものがあれば共有してください!

答え1

以前と同じように実行しますcurl -sL(進行状況バーを削除してリダイレクトに従ってください)、最新のlinux-amd64バージョンのURLを提供してください。

curl -sL "$(curl -L -s https://api.github.com/repos/digitalocean/doctl/releases/latest |
  jq -r '.assets[] | select(.name | contains("-linux-amd64.tar.gz")).browser_download_url')" |
    tar -xzv

内部コマンド置換はgithub APIに最新バージョンのリポジトリを要求し、その名前に対応するjq文字列を含む要素をパイプし-linux-amd64.tar.gzてダウンロードURLを返します。

答え2

パスを(3)部分に分割します。

  1. 非変数ベース:100%予測可能で将来にも変わらない経路の一部

https://github.com/digitalocean/doctl/releases/download/

  1. 変数ディレクトリ名:ディレクトリ名はバージョン番号です。したがって、変更可能であってもセマンティクスのバージョン管理(https://semver.org/):

v$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz'|grep -Eo '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}')/

作業は、最新のファイルを見つけてバージョン番号を抽出することです。から」V「ディレクトリ名はファイル名の一部ではないため、キャプチャできません。grep。だから私は自分の入力変数の前にハードコードしました。

  1. 変数ファイル名:次の式の操作は最新バージョン( "m1”部分)ファイル名:

$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz')

全体の醜いものは次のとおりです(「|tar-xzv「最後に釘付けました):

curl -sL https://github.com/digitalocean/doctl/releases/download/v$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz'|grep -Eo '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}')/$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz') | tar -xzv

このダウンロードはスクリプトを手動で編集しなくても成功します(今後のリリースではファイル名とディレクトリ名が変更される予定です)。

繰り返しますが、これは最もエレガントな解決策ではないかもしれませんが、問題を効果的に解決します。もっと良い方法があれば共有してください! HTH-

関連情報