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의 URL만 유지하고 마지막으로 출력의 첫 번째 줄을 유지합니다. 이것이 바로 제가 필요한 링크입니다. 지금: 이것은Go.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 -

여기서 XPath는 xidel다운로드 페이지에서 관련 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

물론 다음 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'현재 디렉토리로.

관련 정보