我目前正在使用Homebrew软件包管理器,我的问题是:是否可以编写bash脚本来执行brew update
并最终brew upgrade
在每次首次打开shell时执行?我目前正在使用iTerm。
~/.bash_profile
在终端会话开始时自动执行。如果您需要brew update
在第一次启动时运行,则需要进行此检查。如果要在每次打开新窗口时运行此程序,请跳过此步骤并在brew update
中运行~/.bash_profile
。
我目前正在使用Homebrew软件包管理器,我的问题是:是否可以编写bash脚本来执行brew update
并最终brew upgrade
在每次首次打开shell时执行?我目前正在使用iTerm。
~/.bash_profile
在终端会话开始时自动执行。如果您需要brew update
在第一次启动时运行,则需要进行此检查。如果要在每次打开新窗口时运行此程序,请跳过此步骤并在brew update
中运行~/.bash_profile
。
Answers:
这很容易做到。
为了提高效率(和凉爽因素),我将使用诸如Lingon之类的工具定期使用launchctl / launchd启动此脚本,而不是每次启动Shell时都要启动。在我的MacBook上,第二次更新需要3秒钟(未完成任何工作,没有设置DNS缓存等),第一次运行需要10秒钟(未完成工作),如果需要包装则需要15秒以上进行下载或编译。
也许一天一次或一个小时一次-在这些时间内执行,在后台运行就足够了?
您可以创建一个简单的脚本/usr/local/bin/brewup
,该脚本依次调用brew并将结果记录到系统日志中
#!/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
我要去泡茶或开始泡茶时让我打电话给他们。
brewup &
launchd
over 的好处cron
是它更具弹性,更省电,并且更自然地处理睡眠/错过的间隔。
t
标志的干燥版本,请参见记录器的手册页。我使用它,以便可以通过简单grep
或log
命令以及谓词/搜索词在日志中找到这些消息。
有一个名为homebrew-autoupdate的工具将为您完成此操作。它可以brew update
每24小时在后台自动运行一次(可配置),以确保您在安装/升级软件包时始终拥有新鲜的自制数据。
要安装它,请运行brew tap domt4/autoupdate
并将brew autoupdate --start 43200
其配置为每12小时(43200秒)自动更新。
我更喜欢在启动时更新Homebrew。我有一个脚本Update Homebrew.sh
在~/Library/Scripts
:
#!/usr/local/bin/bash
for cmd in update upgrade cleanup\ -s; do
brew $cmd
done
该脚本在启动时使用运行launchd
。为此,我Update Homebrew.plist
在~/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>
请注意,当您拥有MacBook并且仅打开和关闭机盖时,它可能无法可靠地更新。但是,对于我定期关闭并启动的iMac来说,它工作得很好。让我知道它是否有效!
~/.bash_profile
文件中执行此操作。您需要检查是否只有1个终端会话打开,然后再运行brew update
。检查stackoverflow.com/questions/6172663/…,以确定终端窗口的数量。