설치 스크립트를 작성해야 합니다.디지털 바다명령줄 인터페이스"문서"도구지텁사용곱슬, 그러나 문제가 있습니다. 파일 이름은 버전 번호에 따라 변경되므로 하드코딩에서는 새 버전이 출시될 때마다 스크립트를 편집해야 하므로 전체 자동화 지점이 무효화됩니다!
변수 디렉토리와 파일 이름에 대한 경로에 단순히 별표(또는 일부에서는 "별표"라고 부름)를 사용하는 것은 작동하지 않습니다.
내가 사용해야 하는 경로:
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) 부분으로 나눕니다.
- 비변수 기반:100% 예측 가능하고 미래에도 변하지 않는 경로의 부분
https://github.com/digitalocean/doctl/releases/download/
- 변수 디렉터리 이름:디렉토리 이름은 버전 번호입니다. 따라서 변경 가능하더라도 의미 체계 버전 관리(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. 그래서 자체 입력 변수 앞에 하드코딩했습니다.
- 변수 파일 이름:다음 표현식의 연산은 최신 버전("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-