macos - not - install brew windows
Actualice todos los barriles instalados a través de Homebrew Cask (17)
Uso Homebrew Cask para instalar aplicaciones en OS X. ¿Cómo actualizo todos los barriles instalados?
Bash script para actualizar paquetes
inspirado en la respuesta de 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
Que hace
- actualizar brew / brew cask, limpieza
- lee la lista de barriles
-
verifique la
brew cask info
para la versión más nueva - instale una nueva versión si está disponible (¡y elimina todas las versiones antiguas!)
fuente: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b
un forro para impacientes:
curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin
guardar como
/usr/local/bin/cask-upgrade
, para que pueda ejecutarlo localmente como
cask-upgrade
más tarde
homebrew-cask-upgrade
Creo que esta es, con mucho, la mejor solución para actualizar los barriles.
fuente:
buo/homebrew-cask-upgrade
Instalación y uso
brew tap buo/cask-upgrade
brew update
brew cu
(Opcional) Fuerce la actualización de aplicaciones obsoletas, incluidas las marcadas como más recientes:
brew cu --all
A partir de diciembre de 2017 uso: actualización de brew cask
[DEPRECADO desde diciembre de 2017 cuando Homebrew introdujo el comando de actualización para barrica] Simplemente uso lo siguiente:
brew cask outdated | xargs brew cask reinstall
Aquí está la función que he escrito para manejar esto. Tenga en cuenta que personalmente no quería que solo reinstalara ciegamente todo, ya que algunos de los barriles que uso tardan un tiempo en instalarse o requieren indicaciones adicionales.
brew-cask-upgrade() {
if [ "$1" != ''--continue'' ]; then
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
fi
for c in $(brew cask list); do
echo -e "/n/nInstalled versions of $c: "
ls /opt/homebrew-cask/Caskroom/$c
echo "Cask info for $c"
brew cask info $c
select ynx in "Yes" "No" "Exit"; do
case $ynx in
"Yes") echo "Uninstalling $c"; brew cask uninstall --force "$c"; echo "Re-installing $c"; brew cask install "$c"; break;;
"No") echo "Skipping $c"; break;;
"Exit") echo "Exiting brew-cask-upgrade"; return;;
esac
done
done
}
Basado en la respuesta de @Atais, he mejorado su lógica en algo más agradable. Quería una forma de inspeccionar los paquetes que se actualizaron primero, antes de forzar la actualización.
-
$ brew-cask.sh
solo muestra una salida similar a labrew update
de Homebrew. -
la lista anterior muestra todos los paquetes instalados, con un
✔
verde que indica las actualizaciones pendientes. -
$ brew-cask.sh upgrade
forzará la actualización de esos paquetes.
Código:
# Usage:
#
# $ brew update
# You should execute this first to update everything locally.
#
# $ brew-cask.sh [update]
# This will list all of your cask packages and rather there is an upgrade
# pending with a ✔ checkmark, just like Homebrew does with "brew update".
# The update command is optional, as it doesn''t actually do any tracking, there''s
# not really anything to "update" with cask. But it keeps with the pattern of
# of Homebrew''s "brew update" pattern for those with memory muscle fingers (like me).
#
# $ brew-cask.sh upgrade
# This performs a "brew cask install <cask> --force" of all cask packages that have
# an update pending.
#
# This code was inspired by http://.com/a/36000907/56693
# get the list of installed casks
casks=( $(brew cask list) )
if [[ "$1" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n ''1p'' | sed -n ''s/^.*: /(.*/)$//1/p'')"
installed=( $(ls /opt/homebrew-cask/Caskroom/$cask))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
echo "Upgrading $cask to v$current."
(set -x; brew cask install $cask --force;)
else
echo "$cask v$current is up-to-date, skipping."
fi
done
else
echo "Inspecting ${#casks[@]} casks. Use ''brew-cask.sh upgrade'' to perform any updates."
for (( i = i ; i < ${#casks[@]} ; i++ )); do
current="$(brew cask info ${casks[$i]} | sed -n ''1p'' | sed -n ''s/^.*: /(.*/)$//1/p'')"
installed=( $(ls /opt/homebrew-cask/Caskroom/${casks[$i]}))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
casks[$i]="${casks[$i]}$(tput sgr0)$(tput setaf 2) ✔$(tput sgr0)"
fi
done
echo " ${casks[@]/%/$''/n''}" | column
fi
simplemente instálelo (también conocido como "¡Lo necesito ahora!")
Está registrado en
mi repositorio de
.dotfiles
;
entonces, puede instalarlo rápidamente en su
~/bin
con:
$ 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
Luego úsalo así:
$ brew-cask.sh
$ brew-cask.sh upgrade
Si no tiene
~/bin
en su ruta, prefije
~/bin/
a las declaraciones anteriores.
Creo que usando
brew cask reinstall `brew cask outdated`
Hará el truco. Esto también ayudará a eliminar las versiones anteriores de la aplicación e instalará la versión más reciente.
Es posible enumerar los barriles instalados con:
brew cask list
Y forzar la reinstalación de un barril con:
brew cask install --force CASK_NAME
Así que canalizando la salida del primer comando al segundo, actualizamos todos los barriles:
brew cask list | xargs brew cask install --force
Esto realmente me molestó, así que creé este script para actualizar todas las aplicaciones Brew y permitir al usuario elegir qué aplicaciones Cask actualizar. También puede excluir las aplicaciones de la consideración.
Hice tal guión solo. Mire el github https://github.com/pesh1983/brew_cask_upgrade . Tiene una descripción bastante buena, pero si tiene alguna pregunta adicional, no dude en preguntarme. Realiza una actualización justa: desinstala e instala, por lo que cualquier limpieza necesaria será realizada por ''brew''.
Según lo que he leído, he creado un script que creará un archivo que enumera los archivos que se actualizarán, incluidas las aplicaciones que se definen como las más recientes. Luego puede modificar el archivo para adaptarlo a sus requisitos e instalar actualizaciones utilizando mi script olinst.
Para más información visita mi github.
Verifique los barriles obsoletos:
barril de cerveza anticuado
Actualización de todos los barriles obsoletos:
actualización de barril de cerveza
Si desea actualizar un barril específico, simplemente agregue el nombre del barril después de la actualización (por ejemplo: 4k-video-downloader):
actualización de brew cask 4k-video-downloader
mejorando el código proporcionado por deinspanjer, traté de imitar un comando noop, muy parecido al de chocolatey ( actualización de choco --noop / choco desactualizado ).
#!/bin/sh
fetch(){
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
}
lookup() {
for c in $(brew cask list); do
brew cask info $c
done
}
update(){
var=$( lookup | grep -B 3 ''Not installed'' | sed -e ''/^http/d;/^Not/d;/:/!d'' | cut -d ":" -f1)
if [ -n "$var" ]; then
echo "The following installed casks have updates avilable:"
echo "$var"
echo "Install updates now?"
select yn in "Yes" "No"; do
case $yn in
"Yes") echo "updating outdated casks"; break;;
"No") echo "brew cask upgrade cancelled" ;return;;
*) echo "Please choose 1 or 2";;
esac
done
for i in $var; do
echo "Uninstalling $c"; brew cask uninstall --force "$i"; echo "Re-installing $i"; brew cask install "$i"
done
else
echo "all casks are up to date"
fi
}
fetch
update
Como se puede ver, estoy usando un enfoque modular ya que mi caso de uso difiere un poco. No quiero sentarme frente a mi computadora y escribir sí / no para cada aplicación que haya instalado. Si bien no hay una forma real de actualizar los barriles (solo reinstalar la versión más reciente), primero preparo la actualización para tener la información de que realmente hay actualizaciones disponibles .
A continuación, recorro todos los barriles para mostrar su información. Debido a que preparé la actualización antes, ahora se proporciona una con la información de que la última versión de algunos barriles no está instalada.
Dentro de mi método de actualización, en realidad analizo el comando de información para esa línea específica:
lookup | grep -B 3 ''Not installed'' | sed -e ''/^http/d;/^Not/d;/:/!d'' | cut -d ":" -f1
Lo que se traduce en: "Dé las 3 líneas de arriba de la información proporcionada siempre que lea la línea" no instalada ". Luego elimine cualquier línea que tenga un enlace, también elimine una línea que tenga un '':'' en ella".
Dada la estructura del comando de información brew cask, terminamos con una línea (sin información de versión, sin URL de aplicación), que refleja el nombre real del barril con el que también se instaló.
salida de información de barril de cerveza
En mi versión, esta información ahora se imprime para que uno pueda ver fácilmente qué barriles están desactualizados y podrían actualizarse.
En este punto, hago un caso de cambio, porque tal vez en este momento no hay suficiente tiempo para actualizar las cosas. Depende de su caso de uso. Para mí, a veces solo quiero ver qué hay de nuevo (esperando una nueva versión, una corrección de errores) pero en realidad no tengo tiempo para actualizar las cosas porque en este momento no quiero cerrar mi navegador, etc.
Por lo tanto, si uno opta por "sí", la lista de nombres limpios de los barriles se proporciona a la función de actualización donde se emite la reinstalación para cada barril que se determinó que no estaba actualizado.
Gracias de nuevo a deinspanjer, mientras intentaba resolver este problema por mí mismo, siempre olvidé emitir una actualización de preparación de antemano, por lo que no había una línea "no instalada" para analizar realmente (la base de todo mi enfoque).
Espero que esto haya sido útil.
obtener barriles obsoletos:
barril de cerveza anticuado
barril de actualización:
barril de cerveza reinstalar barril obsoleto
script de demostración:
$ cat ~/bin/brew_cask_upgrade.sh
#!/bin/bash
red=$(tput setaf 1)
# green=$(tput setaf 2)
reset=$(tput sgr0)
(set -x; brew update;)
for cask in $(brew cask outdated | awk ''{print $1}'')
do
echo "${red}update ${cask} ...${reset}."
(set -x; brew cask install --force "$cask";)
done
echo "${red}brew clean up ...${reset}"
(set -x; brew cask cleanup;)
echo "${red}brew clean up done.${reset}"
yo suelo
brew cask install --force `brew cask list`
brew cask upgrade
El comando de
upgrade
se ha introducido recientemente en Homebrew Cask y debería desaprobar todos los demás métodos manuales descritos en las otras respuestas.
Actualización de diciembre de 2017
¡Pensé que nunca sucedería, pero ahora finalmente hay un mecanismo de actualización oficial para Homebrew Cask (vea el número 3396 para la implementación)! Para usarlo, simplemente ejecute este comando:
brew cask upgrade
Sin embargo, esto no actualizará los barriles que no tengan información de versiones (
version :latest
) o aplicaciones que tengan un mecanismo de actualización
auto_updates true
(
auto_updates true
).
Para reinstalar estos barriles (y, en consecuencia, actualizarlos si hay actualizaciones disponibles), ejecute el comando de actualización con el indicador
--greedy
esta manera:
brew cask upgrade --greedy
Actualización de marzo de 2017 (cuenta el juego de palabras;) (@polo)
Encontré algunas actualizaciones ya que esto fue originalmente respondido.
Para una solución alternativa, ahora puede usar la
brew cask reinstall
:
brew cask reinstall <cask_name>
brew cask list | xargs brew cask reinstall
El problema 4678 mencionado en la respuesta original se cerró y la función de actualización ahora se analiza en el problema # 29301 También hay buo/homebrew-cask-upgrade , un paquete externo que agrega un comando de actualización para preparar el barril. Lo he probado en algunos paquetes con éxito.
Respuesta original
No existe un método oficial para actualizar los barriles caseros.
Actualmente se está trabajando en esto, pero aún está muy lejos de completarse.
Vea el
número 4678
para más detalles.
Ese problema también tiene algunos ejemplos de scripts que los usuarios usan para actualizar todos sus barriles.
La forma más sencilla de actualizar un solo barril sería ejecutar
brew cask install --force <cask_name>
, pero solo sepa que existe la posibilidad de que esto pueda causar problemas con su aplicación, ya que no se desinstalará correctamente primero.
Por lo general, eso no es un problema.
Puede actualizar todos los barriles instalados utilizando el siguiente comando de shell:
brew cask list | xargs brew cask install --force
Para referencia futura, se pueden encontrar más detalles en el problema duplicado en github .
brew cask outdated | xargs brew cask reinstall --force