gup:go install의 바이너리 대량 업데이트 명령 (규격과 향후)
전언
이 기사는 gup 명령의 방법을 설명한 글입니다.'$goinstall'에 설치된 명령(GOPATH/bin 이하 또는 $GOBIN 이하 명령)을 최신 버전으로 일괄 업데이트하는 명령입니다.현재 버전에 지정된 업데이트 기능이 없습니다.
과거개인 블로그에gup을 올리는 방법에 해봤는데 개선 요구를 받아들이는 과정에서 규격이 큰 폭으로 바뀌었다.그쪽 기사를 다시 쓰기보다는 새로운 재작성 방법을 선택해 젠에게 처음 투고하는 게 낫다.'기사를 몇 번 쓰는 이유'는 이용자가 늘어나면 도구에 대한 개선 요구도 늘어나고 규격을 더 개선할 기회도 늘어나기 때문이다.
설치 방법
이제 "go install"설치 방법만 지원됩니다.구글에서 사용하는 도구이기 때문에 충분하다고 생각합니다. 만약 요구가 있다면.집.대응rpm.
go install github.com/nao1215/gup@latest
gup의 하위 명령 목록
gup 명령의 하위 명령은 Version 0.7.4에서 다음 테이블의 하위 명령을 갖습니다.하위 명령이 지정되지 않은 경우 도움말 메시지가 표시됩니다.
하위 명령
기능
update
GOPATH/bin 이하 또는 $GOBIN 이하 명령을 최신 버전으로 업데이트
list
$GOPATH/bin 이하 또는 $GOBIN 이하의 명령 정보 표시
export
$GOPATH/bin 이하 또는 $GOBIN 이하의 명령 정보를 기록합니다
gup.conf
.import
gup.conf
의 내용에 따라 설치 명령remove
$GOPATH/bin 이하 또는 $GOBIN 이하 명령 제거
업데이트 하위 명령의 규격
gup 명령어의 주요 기능입니다. $GOPATH/bin 이하 또는 $GOBIN 이하의 명령을 최신 버전으로 업데이트합니다.이미 최신 버전인 경우'Alreadyup-to-date'를 표시하고gup 명령에 따라 업데이트된 경우'${구 버전} to${최신 버전}'을 표시합니다.
다음은 실행 예와 실행 결과입니다.실행 결과는 존재하지 않지만 '$go get' 에 설치된 명령은 업데이트에 실패할 것입니다.
$ gup update
gup:INFO : update all binary under $GOPATH/bin or $GOBIN
gup:INFO : [ 1/32] update success: github.com/cheat/cheat/cmd/cheat (Already up-to-date: v0.0.0-20211009161301-12ffa4cb5c87)
gup:INFO : [ 2/32] update success: fyne.io/fyne/v2/cmd/fyne_demo (Already up-to-date: v2.1.3)
gup:INFO : [ 3/32] update success: github.com/nao1215/gal/cmd/gal (v1.0.0 to v1.2.0)
:
: (省略)
:
gup:INFO : [32/32] update success: github.com/nao1215/ubume/cmd/ubume (Already up-to-date: v1.5.0)
명령 이름을 업데이트 하위 명령의 매개 변수로 전송한 후 매개 변수가 지정한 명령만 최신 버전으로 업데이트합니다.$ gup update ubume lazygit
gup:INFO : update all binary under $GOPATH/bin or $GOBIN
gup:INFO : [1/2] update success: github.com/jesseduffield/lazygit (Already up-to-date: v0.32.2)
gup:INFO : [2/2] update success: github.com/nao1215/ubume/cmd/ubume (Already up-to-date: v1.5.0)
gup명령은 --dry-run
옵션이 있기 때문에'결과가 어떤지 알고 싶지만 업데이트하고 싶지 않습니다'는 상황에서 사용하십시오.업데이트 하위 명령의 내부 규격
gup 명령의 구조는 매우 간단합니다. 달러 GOPATH/bin 이하나 달러 GOBIN 이하의 명령에 대해 "$goinstall${명령 경로] @latest"를 순서대로 실행하고 있습니다.
명령을 업데이트하려면 대상 명령의 import partth(예:github.com/nao1215/gup)를 업데이트해야 합니다.gup 명령은 '$go versin-m${명령이 저장된 경로}' 의 실행 결과에서 import path를 얻었습니다.
)$ go version -m ~/.go/bin/gup
/home/nao/.go/bin/gup: go1.17
path github.com/nao1215/gup ★ ここがimport path情報
mod github.com/nao1215/gup v0.7.3 ★ バージョン情報はここから取得
(省略)
--dry-run
옵션이 유효하면 달러 GOPATH/bin 또는 달러 GOBIN을 다른 경로로 임시로 변경한 후 구축을 수행합니다.--dry-run
옵션이 무효인 경우--dry-run
에 비해 옵션이 유효할 때 전체 구축이기 때문에 시간이 걸린다.list 하위 명령
$GOPATH/bin 이하 또는 $GOBIN 이하의 명령 정보를 나열합니다.표시할 정보는 다음과 같습니다.
$ gup list
cheat: github.com/cheat/cheat/cmd/[email protected]
fyne_demo: fyne.io/fyne/v2/cmd/[email protected]
gal: github.com/nao1215/gal/cmd/[email protected]
germanium: github.com/matsuyoshi30/germanium/cmd/[email protected]
ginkgo: github.com/onsi/ginkgo/[email protected]
git-chglog: github.com/git-chglog/git-chglog/cmd/[email protected]
export/import 하위 명령
export/import 하위 명령은 규격이 완비되지 않은 잔류입니다.gup 명령의 초기 규격에서 셸의 실행 역사에서 import path를 가져오고
~/.config/gup/gup.conf
에 import path의 규격을 남깁니다.그리고 gup.conf
의 내용에 따라 업데이트를 실시했다.gup.conf
는'KEY=VALUE'의 형식이고 KEY는 명령명이며 VALUE는 import partth이다.$ cat ~/.config/gup/gup.conf
cheat = github.com/cheat/cheat/cmd/cheat
fyne_demo = fyne.io/fyne/v2/cmd/fyne_demo
germanium = github.com/matsuyoshi30/germanium/cmd/germanium
ginkgo = github.com/onsi/ginkgo/ginkgo
규격이 완비되지 않은 내용은'셸의 역사가 사라졌기 때문에 모든 import path를 얻을 수 없다'는 내용이다.이 과제를 해결하기 위해 현재'go version-m'을 사용하는 방법이 바뀌고 있다.개선 규격이 완비되지 않을 때는'환경 A에서 제작
gup.conf
하고, 환경 B에서 근거gup.conf
한 정보에 따라 설치 명령을 내리면 환경 구축이 수월해진다'는 생각을 했다.인상은 여러 환경에서 dotfiles를 공유하는 느낌이다.따라서, 현재는 export 하위 명령을 통해
gup.conf
생성할 수 있으며, import 하위 명령을 기반으로 gup.conf
명령을 설치할 수 있습니다.$ gup export
gup:INFO : Export /home/nao/.config/gup/gup.conf
$ gup import
gup:INFO : start update based on /home/nao/.config/gup/gup.conf
gup:INFO : update all binary under $GOPATH/bin or $GOBIN
gup:INFO : [ 1/32] update success: github.com/cheat/cheat/cmd/cheat (<from gup.conf> to v0.0.0-20211009161301-12ffa4cb5c87)
gup:INFO : [ 2/32] update success: fyne.io/fyne/v2/cmd/fyne_demo (<from gup.conf> to v2.1.3)
(省略)
remove 하위 명령
remove 하위 명령 이름은 $GOPATH/bin 이하 또는 $GOBIN 이하의 명령 이름으로 매개변수이며 명령을 삭제합니다.명령을 설치하려고 할 때 빠르게 삭제하기 위해 추가된 기능입니다.
$ gup remove gal ubume subaru
gup:CHECK: remove /home/nao/.go/bin/gal? [Y/n] Y
gup:INFO : removed /home/nao/.go/bin/gal
gup:CHECK: remove /home/nao/.go/bin/ubume? [Y/n] Y
gup:INFO : removed /home/nao/.go/bin/ubume
gup:CHECK: remove /home/nao/.go/bin/subaru? [Y/n] Y
gup:INFO : removed /home/nao/.go/bin/subaru
--force
에 옵션을 추가하면 삭제 확인이 사라지고 명령을 강제로 삭제합니다.$ gup remove --force lazygit
gup:INFO : removed /home/nao/.go/bin/lazygit
향후 (추가 가능 기능)
개인적으로 필요하다고 생각하는 기능은 다음과 같다.
- 업데이트 소요 시간
gup.conf
주제 밖의 말: OSS 자체 제작을 위한 적절한 홍보 필요
지금까지 자신이 만든 OSS의 홍보는 자신의 기술 블로그에만 쓰이고 적극적인 홍보는 하지 않았다.그러나gup지령은 mattn의 트위터에 의해 GiitHub Star 증가 기능에 대한 의견을 듣기 시작했다.
스타는 동기와 연결되고 의견은 소프트웨어 개선과 연결되어 매우 귀중하다.하지만 자체 제작 OSS는 소개 기사가 올라오거나 트위터에 올라올 때만 주목을 받는다.제게 소개 기사를 써줄 사람이 거의 없기 때문에 제인에게만 쓸 수 있습니다이렇게 생각한 결과
(단, 자체 제작한 OSS만 사용하고 홍보하면 검색에 방해가 되지 않는다)
마지막으로 당신의 의견 일부를 소개하면 끝납니다.다 그런 것 같아서 바로 수정했어요.
$ gup
에서 업데이트를 시작하는 것보다 $ gup update
에서 업데이트를 시작하는 것이 낫다.갑작스러운 업데이트 방지--file
옵션으로 명령명을 지정하기보다는 매개 변수로 직접 지정하는 것이 더 자연스럽다gup:WARN : $GOPATH/bin or $GOBIN contains the directory
가 있습니다Reference
이 문제에 관하여(gup:go install의 바이너리 대량 업데이트 명령 (규격과 향후)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nao1215/articles/aef3fe318848d6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)