컬을 사용하여 파일 이름과 경로가 가변적인 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-

관련 정보