Автоматичне оновлення домашньої мови


13

В даний час я використовую диспетчер пакунків Homebrew, і моє питання: чи можливо написати скрипт bash для того, щоб виконати brew updateі, зрештою, brew upgradeкожного разу, коли вперше відкривати оболонку? На даний момент я використовую iTerm.


Це можна зробити у ~/.bash_profileфайлі. Вам потрібно буде перевірити, чи відкрито лише 1 сеанс терміналу, а потім запустити brew update. Перевірте stackoverflow.com/questions/6172663/… на визначення кількості вікон терміналів.
Матеуш Шлосек

Це кількість терміналів, які відкриті при виконанні скрипту, або кількість терміналів, відкритих взагалі?
g_rmz

Це кількість відкритих терміналів (windows + вкладки) під час запуску сценарію. ~/.bash_profileавтоматично виконується на початку сеансу терміналу. Ця перевірка потрібна, якщо вам потрібно запустити brew updateпри першому запуску. Якщо Ви хочете запустити це кожен раз , коли відкривається нове вікно, пропустіть цей крок і запустити brew updateв ~/.bash_profile.
Матеуш Шлосек

Це зробить відкриття вкладки "Термінал" дуже повільним
користувач151019,

Добре, дякую! :) Це погіршить роботу терміналу дуже погано?
g_rmz

Відповіді:


20

Це зробити дуже просто.

Для ефективності (і класного фактора) я використовував би такий інструмент, як Lingon, щоб періодично запускати цей сценарій, використовуючи startctl / startd замість кожного разу, коли ви запускаєте оболонку. На моєму MacBook триває 3 секунди для оновлення вдруге (не виконано роботи, встановлено кеш-пам'ять DNS і т. Д.), А для першого запуску потрібно 10 секунд (без роботи) або 15+ секунд, якщо пакет потребує для завантаження або складання.

Можливо, раз на день чи раз на годину - біг у фоновому режимі був би достатнім, враховуючи ті часи, щоб виконати?

Ви можете зробити простий скрипт, /usr/local/bin/brewupякий викликає варити по черзі та записує результати в системний журнал

#!/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 Я погоджуюсь, що краще використовувати щось подібне до startclt, а не працювати на кожному запуску терміналу. Крім того, це термінал незалежний (для користувачів iTerm).
Матеуш Шлосек

1
Це геніально, дякую! :) Як щодо crontab замість Lingon?
g_rmz

2
@g_rmz З crontab нічого поганого, і це легко зрозуміти. Якщо це працює, запустіть з ним. Переваги launchdнад cronтим, що він більш еластичний, більш енергійний і більш природним чином обробляє інтервали сну / пропущеного.
bmike

Дякуємо за чудовий сценарій. Тільки з цікавості - який варіант -t?
avriis

1
Гей @dahved. Перегляньте головну сторінку для реєстратора для сухої версії tпрапора. Я використовую це, щоб я міг легко знайти ці повідомлення в морі журналів за допомогою легкої grepабо logкомандної та предикатної / пошукової фрази.
bmike

7

Є інструмент під назвою 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, який я регулярно вимикаю та запускаю. Дайте мені знати, чи працює!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.