Có cách nào để nâng cấp thùng bia không


37

Có cách nào để nâng cấp tất cả brew cask? Một cái gì đó như thế brew cask upgradenào?

Câu trả lời:


23

Tập lệnh Bash để nâng cấp gói

lấy cảm hứng từ câu trả lời của Pascal

#!/usr/bin/env bash

(set -x; brew update;)

(set -x; brew cleanup;)
(set -x; brew cask cleanup;)

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`

casks=( $(brew cask list) )

for cask in ${casks[@]}
do
    version=$(brew cask info $cask | sed -n "s/$cask:\ \(.*\)/\1/p")
    installed=$(find "/usr/local/Caskroom/$cask" -type d -maxdepth 1 -maxdepth 1 -name "$version")

    if [[ -z $installed ]]; then
        echo "${red}${cask}${reset} requires ${red}update${reset}."
        (set -x; brew cask uninstall $cask --force;)
        (set -x; brew cask install $cask --force;)
    else
        echo "${red}${cask}${reset} is ${green}up-to-date${reset}."
    fi
done

Những gì nó làm

  • cập nhật thùng bia / bia, dọn dẹp
  • đọc danh sách các nhóm
  • kiểm tra brew cask infophiên bản mới nhất
  • cài đặt phiên bản mới nếu có (và xóa tất cả các phiên bản cũ!)

nguồn: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

Một lót cho thiếu kiên nhẫn:

curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin

lưu dưới dạng /usr/local/bin/cask-upgrade , để bạn có thể chạy nó cục bộ như cask-upgradesau


Làm việc như người ở. Mặc dù vậy, sẽ rất tốt để truy vấn danh sách đầu tiên trong số các gói hết hạn. Đủ dễ dàng để điều chỉnh các kịch bản để làm điều đó.
eduncan911

Cảm ơn bạn! Bạn đã thử tích hợp tính năng này trực tiếp vào Homebrew Cask chưa? Tôi chỉ chuyển đổi nó thành cá và nó cũng hoạt động với tôi. Nó cũng tiết lộ với tôi rằng một số phiên bản cũ vẫn còn hiện diện sau khi tôi cài đặt những phiên bản hiện tại.
Pascal

Bạn cần chạy brew cask uninstall --forcetrước khi cài đặt phiên bản mới nếu bạn không muốn phiên bản cũ ở đó.
Pascal

@Pascal yeah Tôi nhận thấy tôi cũng có rất nhiều phiên bản cũ được xếp chồng lên nhau. Tôi sẽ sớm thêm lệnh gỡ cài đặt.
Atais

@Atais việc gỡ cài đặt vẫn liên tục làm việc cho bạn? Một số nhóm bây giờ để lại một thư mục trống với số phiên bản với tập lệnh của tôi, điều này gây rối với việc kiểm tra phiên bản.
Pascal


19

nâng cấp homebrew-thùng

Tôi nghĩ rằng đây là giải pháp tốt nhất để nâng cấp các thùng.
nguồn: https://github.com/buo/homebrew-cask-upTHER

Cài đặt và sử dụng

brew tap buo/cask-upgrade
brew update
brew cu

(Tùy chọn) Buộc nâng cấp các ứng dụng lỗi thời bao gồm những ứng dụng được đánh dấu là mới nhất:

brew cu --all

12

Như trích dẫn trong câu trả lời khác nói, hiện tại không có cách nào để nâng cấp tất cả các bản cập nhật.

Mặc dù vậy, phần thứ hai của câu trả lời là sai: brew upgrade --allkhông thể nâng cấp thùng.

Cách duy nhất để nâng cấp tất cả các nhóm là lấy danh sách các nhóm đã cài đặt và buộc chúng phải được cài đặt lại - bao gồm cả các nhóm không thay đổi!

, bạn có thể làm như thế này:

for app in (brew cask list)
    brew cask install --force $app
end

chỉnh sửa:

Atais đã tạo ra một tập lệnh hoạt động: Tập lệnh Bash để nâng cấp các gói .
Hãy nêu lên câu trả lời của anh ấy chứ không phải cái này.


1
Chà, nhớ rằng nó thực sự sẽ cài đặt lại tất cả các ứng dụng của bạn, không chỉ cập nhật lỗi thời :(
Atais

1
Để nâng cấp danh sách thùng, bạn nên chạy brew cask updatesau đó làm theo phản hồi trước đó để chỉ nâng cấp các gói hiện đã hết hạn tại đây: apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW Tôi quay lại thay đổi của bạn vì nó sai. Nó có thể là cách để làm điều đó trong các vỏ khác, nhưng nó không phải là cá.
Pascal

10

Từ homebrew casktài liệu :

Vì kho lưu trữ homebrew-cask là Homebrew Tap, bạn sẽ kéo xuống các Casks mới nhất mỗi khi bạn phát lệnh Homebrew thông thường brew update. Hiện tại, homebrew-thùng không thể luôn luôn phát hiện nếu Ứng dụng đã được cập nhật. Bạn có thể buộc cập nhật thông qua lệnh brew cask install --force. Chúng tôi đang làm việc để cải thiện điều này.

Những điều sau đây là đủ để nâng cấp cả công thức pha chế và thùng.

brew upgrade --all 

4
Điều này không còn đúng nữa. brew upgrade --alltương đương với brew upgradebây giờ Casks không được nâng cấp bởi lệnh đó.
proski

6

Đây là những gì tôi có trong .bash_profile mà tôi chạy để thực hiện một bản nâng cấp đầy đủ của homebrew. Tôi "ghim" một vài mục để giữ cho các bản tải xuống khổng lồ không bị tải xuống liên tục cho mỗi bản cập nhật, vì các phiên bản của chúng luôn là "mới nhất" hoặc chúng không nên được nâng cấp.

boop() {
  brew update && brew upgrade && brew cleanup \
    && cask-upgrade && cask-retire && brew cask cleanup \
      && brew doctor && brew cask doctor
}

__is_pinned() {
  local pinned=";pixate-studio;sketchup;skype;"
  [[ *";${1};"* != "${pinned}" ]] && return 0 || return 1
}

cask-upgrade() {
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      if [[ "${vers}" == "latest" ]]; then
        brew cask install "${name}" --force
      else
        brew cask install "${name}" 2> >(grep -v "re-install")
      fi
    fi
  done < <(brew cask list --versions)
}

cask-retire() {
  room="/opt/homebrew-cask/Caskroom"
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      for inst in $(ls "${room}/${name}"); do
        if [[ "${inst}" != "${vers}" ]]; then
          echo "Removing ${name} version ${inst}"
          rm -r "${room}/${name}/${inst}"
        fi
      done
    fi
  done < <(brew cask list --versions)
}

2

Để cài đặt lại ứng dụng ủ bia trong zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done

Điều này không tốt cho người dùng có thể có nhiều brew caskcài đặt yêu cầu đầu vào của người dùng (ví dụ: thạch anh) . Ngoài ra, không cần thiết phải gỡ cài đặt mọi ứng dụng trước khi cài đặt lại. Tốt nhất bạn cũng nên chạy một bản cập nhật như brew cask updatetrước.
Danijel-James W

@ Danijel-JamesW Thật không may, nếu bạn không muốn phiên bản cũ ở lại.
Pascal


1

Tôi khuyên bạn nên trả lời @ eduncan911 trong câu hỏi đối tác trên Stack Overflow .

Nói ngắn gọn:

  • $ brew-cask.shchỉ liệt kê một đầu ra tương tự như của Homebrew brew update. danh sách trên hiển thị tất cả các gói được cài đặt, với màu xanh lục cho biết mọi cập nhật đang chờ xử lý.
  • $ brew-cask.shnâng cấp sẽ buộc nâng cấp các gói đó.

Cài đặt từ repo của mình với:

$ curl -L https://raw.githubusercontent.com/eduncan911/dotfiles/master/bin/brew-cask.sh --create-dirs -o ~/bin/brew-cask.sh
$ chmod 755 ~/bin/brew-cask.sh

Sau đó sử dụng nó như thế này:

$ brew-cask.sh
$ brew-cask.sh upgrade

1

Tôi tự làm kịch bản như vậy. Vui lòng xem github https://github.com/pesh1983/brew_cask_upTHER . Nó có mô tả khá tốt, nhưng nếu bạn có bất kỳ câu hỏi nào khác, vui lòng hỏi tôi. Nó thực hiện nâng cấp công bằng: gỡ cài đặt và cài đặt, do đó, mọi thao tác dọn dẹp cần thiết sẽ được thực hiện bởi chính 'brew'.


1

Điều này có lẽ sẽ phù hợp hơn khi là một nhận xét, nhưng tôi không có đủ danh tiếng để để lại một bình luận, vì vậy ...

Theo văn bản này, homebrew-caskcó hệ thống nâng cấp riêng của mình và do đó, các tập lệnh và công cụ của bên thứ ba không còn cần thiết nữa.

Để liệt kê các thùng lỗi thời: brew cask outdated

Để nâng cấp tất cả các thùng lỗi thời: brew cask upgrade


0
for app in $(brew cask list); do
    cver="$(brew cask info "${app}" | head -n 1 | cut -d " " -f 2)"
    ivers=$(ls -1 "/opt/homebrew-cask/Caskroom/${app}/.metadata/" | tr '\n' ' ' | sed -e 's/ $//')
    aivers=(${ivers})
    nvers=$(echo ${#aivers[@]})
    echo "[*] Found ${app} in cask list. Latest available version is ${cver}. You have installed version(s): ${overs}"
    if [[ ${nvers} -eq 1 ]]; then
        echo "${ivers}" | grep -q "^${cver}$" && { echo "[*] Latest version already installed :) Skipping changes ..."
        continue; }
    fi
    echo "[+] Fixing from ${ivers} to ${cver} ..."
    brew cask uninstall "${app}" --force
    brew cask install "${app}"
done

Điều này là không thể đọc được - cũng cần giải thích về những gì nó làm
user151019
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.