i'm currently using the Homebrew package manager and my question is: is possibile to write a bash's script in order to execute brew update and eventually brew upgrade whenever opening a shell for the first time? I'm using iTerm at the moment.


Solution 1:

This was easily done with scripts and now the built-in autoupdate mechanism handles this elegantly. See Tate’s excellent answer for details


If the automatic update and upgrade aren’t working, here is another way for older versions.

For efficiency (and cool factor), I would use a tool like Lingon to launch this script periodically using launchctl/launchd instead of each time you start a shell. On my MacBook, it takes 3 seconds to update the second time (no work done, DNS cache set, etc...) and it take 10 second to run the first time (no work done) or 15+ seconds if a package needs to be downloaded or compiled.

Perhaps once a day or once an hour - running in the background would be sufficient given those times to execute?

You could make a simple script /usr/local/bin/brewup that calls brew in turn and logs the results to the system log. If you don’t like chasing logs in the centralized log store, “teeing” them to a text file works well, too.

#!/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

I just call the brewup when I'm about to go make tea or when I get started and let it run in the background.

brewup &

Solution 2:

Homebrew has an autoupdate subcommand. So you can run:

brew autoupdate start

To automatically run brew update every 24 hours. The docs linked above outline a number of configuration options. Because you'd like to also run brew upgrade, you can run:

brew autoupdate start --upgrade

Under the hood brew autoupdate is using launchd.