Чи є швидкий спосіб відновити мої домашні кеги?


61

Я щойно модернізував MacBook Air до Mavericks. Здається, цей процес видалив майже всі посилання, що homebrewвводяться /usr/local/bin. Як я помічаю, що речі відсутні, я переспрямовую їх через brew unlink <keg> && brew link <keg>(хоча символьні посилання вже відсутні, homebrewвсе ще думає, що вони є там, тому мені потрібно unlinkспочатку). Це відчуває себе дещо неефективно.

Я міг би просто переглядати все, /usr/local/Cellarале не кожен кег автоматично пов'язаний, і я не хочу їх пов’язувати. Отож, наступним моїм здогадком є ​​перерахування кожної пов’язаної кеги та перейменування їх (використовуючи вищесказане).

Чи є якась магічна команда, яка знайде всі кеги, які homebrew думають , пов’язані, щоб я міг їх повторно зв’язати?


Я використовував програму Migration Assistant, щоб перемістити "все" зі старого Mac на новий, а також втратив усі свої посилання на домашню мову. Дратівливий.
Грав

Відповіді:


39

/usr/local/Library/LinkedKegs Схоже, містить список добре пов’язаних кегів, тож для цього слід зробити фокус:

ls -1 /usr/local/Library/LinkedKegs | while read line; do
    echo $line
    brew unlink $line
    brew link --force $line
done

Рекомендую /usr/local/libперед тим, як спробувати, ще раз мати права на запис .


Досить впевнений, що це просто відновило мою домашню бульбу в робочому стані. Дякую!
Роберт Массайолі

Дивовижно, дякую :) щойно вигадали це, якщо ви не заперечуєте, я впевнений, що ми не єдиний, хто стикався з цією проблемою .. goo.gl/YTPMjh
Стоун Алессандро

1
Ні, не робіть --force! brew linkїх повинно бути достатньо, і деякі кеги дійсно не повинні бути пов’язані (оскільки вони можуть суперечити системним бібліотекам), тоді як --forceвони змусять їх зв’язатись.
Кріс Джефферсон

Ага. Схоже, я також видалив /usr/local/Library.
Кайл Странд

59

Ця команда bash (взята звідти ) від’єднає всі встановлені формули, а потім знову зв’яже їх:

brew list -1 | while read line; do brew unlink $line; brew link $line; done

Я думаю, що всі формули потрібно пов’язати, інакше, залежно від того, який інструмент від них залежить, їх не вдасться знайти ..


Я не впевнений, що всі формули потрібно пов’язувати. Деякі з них є лише бочками, але я не знаю яких, оскільки деякі були встановлені як залежності інших.
Петля пробілу

4
Здається, ви отримуєте лише попередження на кшталт "Попередження: extempore - це лише кег і має бути пов'язане з --force"
Grav

2
Ось еквівалентна версія з використанням xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow

чудово використовувати. Я використовую 10.12.6 mac os
Raju yourPepe

8

На додаток до інших відповідей на це запитання, можливо, вам також знадобиться повторно зв’язати формулу з кількома встановленими версіями ( brew linkце не зробить для вас).

Спочатку відновіть всі формули, які ви можете:

brew list -1 | while read line; do brew unlink $line; brew link --force $line; done

Потім запустіть brew doctor, який повинен скаржитися і надати вам два списки:

  • Від’єднані формули з декількома версіями
  • Формули, що стосуються лише кега, які були неправильно пов’язані оригінальним процесом повторного посилання.

Для кожної формули з декількома версіями виконайте наступне, замінюючи "python" на ім'я формули:

brew info python  

Це покаже вам, крім іншої інформації, всі встановлені версії. Виберіть версію, яку ви хочете пов’язати (для мене її 2.7.6), і використовуйтеbrew switch

brew switch python 2.7.6

Ви також хочете запустити brew unlinkу список (якщо такий є) лише формули, які були пов'язані з кег.

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