38 votos

Actualización automática de Homebrew

Actualmente estoy usando el gestor de paquetes Homebrew y mi pregunta es: ¿es posible escribir un bash's script para ejecutar brew update y eventualmente brew upgrade cada vez que se abre una cáscara por primera vez? En este momento estoy usando iTerm.

0 votos

Puede hacerlo en ~/.bash_profile archivo. Tendrá que comprobar si sólo hay una sesión de Terminal abierta y luego ejecutar brew update . Consulte stackoverflow.com/questions/6172663/ para determinar el número de Windows de Terminal.

0 votos

Es decir, el número de los terminales que están abiertos cuando se ejecuta el script o el número de terminales abiertos en general?

0 votos

Es el número de Terminales abiertas (Windows + pestañas) cuando se ejecuta el script. ~/.bash_profile se ejecuta automáticamente al inicio de la sesión de Terminal. Esta comprobación es necesaria si necesita ejecutar brew update en la primera salida. Si desea ejecutar esto cada vez que se abra una nueva ventana, omita este paso y ejecute brew update en ~/.bash_profile .

35voto

Oskar Puntos 1242

Esto es muy fácil de hacer.

Por eficiencia (y por el factor cool), yo utilizaría una herramienta como Lingon para lanzar este script periódicamente usando launchctl/launchd en lugar de cada vez que inicie un shell. En mi MacBook, tarda 3 segundos en actualizarse la segunda vez (sin trabajo realizado, caché de DNS establecida, etc...) y tarda 10 segundos en ejecutarse la primera vez (sin trabajo realizado) o 15+ segundos si hay que descargar o compilar un paquete.

¿Quizás una vez al día o una vez por hora, ejecutándose en segundo plano, sería suficiente con esos tiempos de ejecución?

Podrías hacer un simple script /usr/local/bin/brewup que llama a brew a su vez y registra los resultados en el registro del sistema. Si no te gusta perseguir los registros en el almacén centralizado de registros, "teeing" a un archivo de texto también funciona bien.

#!/bin/bash

brew=/usr/local/bin/brew
logger=/usr/bin/logger

$brew update 2>&1  | $logger -t brewup.update
$brew upgrade 2>&1 | $logger -t brewup.upgrade
$brew cleanup 2>&1 | $logger -t brewup.cleanup

Simplemente llamo al brewup cuando estoy a punto de ir a hacer el té o cuando empiezo y dejo que se ejecute en segundo plano.

brewup &

2 votos

+1 Estoy de acuerdo en que es mejor usar una especie de launchclt en lugar de ejecutarlo en cada inicio de Terminal. Además, es independiente del Terminal (para los usuarios de iTerm).

1 votos

Esto es brillante, ¡gracias! :) ¿Qué tal crontab en lugar de Lingon?

3 votos

@g_rmz No hay nada de malo en crontab y es fácil saberlo. Si funciona, corre con él. Los beneficios de launchd en cron es que es más resistente, más amigable con la energía y maneja los intervalos de sueño / ausencia con mayor naturalidad.

18voto

Rachel Puntos 81

Existe una herramienta llamada homebrew-autoupdate que lo hará por ti. Puede ejecutar automáticamente brew update en segundo plano cada 24 horas (configurable) para asegurar que siempre tengas datos frescos de homebrew cuando vayas a instalar/actualizar paquetes.

Para instalarlo, ejecute brew tap domt4/autoupdate y brew autoupdate --start 43200 para configurarlo para que se actualice automáticamente cada 12 horas (43200 segundos).

4voto

sneeuwitje Puntos 1

Tal vez quieras preguntarte: "¿Realmente quiero autoactualizar las aplicaciones de las que dependen las que yo mismo construyo?"

Equipo de cerveza rechazó esta solicitud de función para facilitar las actualizaciones tempranas .

Mi interpretación de su razonamiento: "El riesgo de que un código malicioso se cuele en el proceso de auditoría del código abierto pesa más que la necesidad incidental de una actualización rápida".

Si esta es su línea de razonamiento, le gusta tener el control de las actualizaciones de software, y le importa mucho que los paquetes homebrew estén actualizados, probablemente sea mejor añadir una línea al final de .bashrc (o el archivo rc de su shell favorito) preguntando a :

brew outdated

Esto le enfrentará, en cada nuevo terminal, a los paquetes obsoletos. Cuando tu fastidio llegue al límite (te sientas preparado para actualizar), estarás encantado de hacer lo necesario.

2voto

Daan Puntos 118

Prefiero actualizar Homebrew en el arranque. Tengo un script Update Homebrew.sh en ~/Library/Scripts :

#!/usr/local/bin/bash

for cmd in update upgrade cleanup\ -s; do
  brew $cmd
done

Este script se ejecuta al arrancar utilizando launchd . Para ello, tengo Update Homebrew.plist en ~/Library/LaunchAgents :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>Update Homebrew</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/Daan/Library/Scripts/Update Homebrew.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Ten en cuenta que podría no actualizarse de forma fiable cuando, por ejemplo, tengas un MacBook y sólo abras y cierres la tapa. Sin embargo, funciona bien para mi iMac que regularmente apago y arranco. ¡Hazme saber si funciona!

1voto

Miro Puntos 2705

Puedes usar cron para simplificar esto.

Encuentre el lugar de instalación de su cerveza con which brew . El mío estaba en la ubicación por defecto:

/usr/local/bin/brew

Utilizando crontab -e añada esta línea al editor (actualícela con la ubicación de su cerveza):

0 9 * * * /usr/local/bin/brew update && /usr/local/bin/brew upgrade && /usr/local/bin/brew cleanup

Lo anterior actualizará la cerveza, actualizará las fórmulas y las barricas, y luego limpiará, todas las mañanas a las 9.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X