Есть ли быстрый способ перепроверить мои домашние кеги?

61

Я только что обновил свой MacBook Air до Mavericks. Процесс, кажется, удалил почти все homebrewвставленные ссылки /usr/local/bin. Когда я замечаю, что чего-то не хватает, я заново связываю их brew unlink <keg> && brew link <keg>(хотя символические ссылки исчезли, но homebrewвсе же думает , что они есть, поэтому мне нужно unlinkсначала). Это кажется несколько неэффективным.

Я мог бы просто просмотреть все, /usr/local/Cellarно не все кеги автоматически связываются, и я не хочу их связывать. Поэтому мое следующее предположение - перечислить все связанные кеги и связать их заново (используя вышеизложенное).

Есть ли какая-то волшебная команда, которая найдет все кеги, которые, по их homebrew мнению , связаны между собой, чтобы я мог связать их?

Loop Space
источник
Я использовал Migration Assistant для перемещения «всего» со старого Mac на новый, а также потерял все свои доморощенные символические ссылки. Раздражает.
Grav

Ответы:

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раз, прежде чем пытаться это сделать.

mike__t
источник
Уверен, что это только восстановило мой домашний напиток в рабочем состоянии. Спасибо!
Роберт Массайоли
Удивительно, спасибо :) только что сделал из этого суть, если вы не возражаете, я почти уверен, что мы не единственные, кто столкнулся с этой проблемой .. goo.gl/YTPMjh
Stone Alessandro
1
Нет, не делай --force! brew linkдолжно быть достаточно, и некоторые кеги на самом деле не должны быть связаны (поскольку они могут конфликтовать с системными библиотеками), в то время как --forceбудут принудительно связаны.
Крис Джефферсон
Да. Похоже, я тоже удалил /usr/local/Library.
Кайл Стрэнд
59

Эта команда bash ( оттуда ) отменит все установленные формулы, а затем снова свяжет их:

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

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

пис
источник
Я не уверен, что все формулы должны быть связаны. Некоторые из них предназначены только для бочонков, но я не знаю, какие из них были установлены, поскольку некоторые из них были установлены как зависимости других.
Loop Space
4
Кажется, вы просто получаете некоторые предупреждения типа «Предупреждение: extempore только для бочонка и должно быть связано с --force»
Grav
2
Вот эквивалентная версия с использованием xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow
здорово использовать. Я использую Mac OS 10.12.6
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в списке (если есть) формул только кеги, которые были связаны.

Скотт Ричи
источник