自动更新自制程序


13

我目前正在使用Homebrew软件包管理器,我的问题是:是否可以编写bash脚本来执行brew update并最终brew upgrade在每次首次打开shell时执行?我目前正在使用iTerm。


您可以在~/.bash_profile文件中执行此操作。您需要检查是否只有1个终端会话打开,然后再运行brew update。检查stackoverflow.com/questions/6172663/…,以确定终端窗口的数量。
Mateusz Szlosek 2015年

那就是执行脚本时打开的终端数量或通常打开的终端数量?
g_rmz 2015年

这是运行脚本时打开的终端数量(Windows +选项卡)。~/.bash_profile在终端会话开始时自动执行。如果您需要brew update在第一次启动时运行,则需要进行此检查。如果要在每次打开新窗口时运行此程序,请跳过此步骤并在brew update中运行~/.bash_profile
Mateusz Szlosek 2015年

这会使打开“终端”选项卡非常慢
user151019

好的谢谢!:)会降低终端的性能很不好吗?
g_rmz 2015年

Answers:


20

这很容易做到。

为了提高效率(和凉爽因素),我将使用诸如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 &

2
+1我同意最好使用tome类的launchclt而不是在Terminal的每个启动处运行。此外,它与终端无关(适用于iTerm用户)。
Mateusz Szlosek

1
太好了,谢谢!:)用crontab代替Lingon怎么样?
g_rmz

2
@g_rmz crontab没什么问题,很容易知道。如果可行,请运行它。launchdover 的好处cron是它更具弹性,更省电,并且更自然地处理睡眠/错过的间隔。
bmike

感谢您的出色脚本。出于好奇--t选项是什么?
avriis '18

1
嘿@dahved 有关t标志的干燥版本,请参见记录器的手册页。我使用它,以便可以通过简单greplog命令以及谓词/搜索词在日志中找到这些消息。
bmike

6

有一个名为homebrew-autoupdate的工具将为您完成此操作。它可以brew update每24小时在后台自动运行一次(可配置),以确保您在安装/升级软件包时始终拥有新鲜的自制数据。

要安装它,请运行brew tap domt4/autoupdate并将brew autoupdate --start 43200其配置为每12小时(43200秒)自动更新。


0

我更喜欢在启动时更新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来说,它工作得很好。让我知道它是否有效!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.