Czy istnieje szybki sposób, aby ponownie połączyć moje domowe beczki?

61

Właśnie uaktualniłem MacBooka Air do Mavericks. Wydaje się, że proces usunął prawie wszystkie homebrewwstawione dowiązania symboliczne /usr/local/bin. Gdy zauważam, że czegoś brakuje, łączę je ponownie brew unlink <keg> && brew link <keg>(mimo że dowiązań symbolicznych już nie ma, homebrewnadal myślę, że tam są, więc unlinknajpierw muszę to zrobić ). To wydaje się nieco nieefektywne.

Mógłbym po prostu przejrzeć wszystko, /usr/local/Cellarale nie każda beczka jest automatycznie połączona i nie chcę ich łączyć. Więc moim następnym przypuszczeniem jest wyświetlenie listy wszystkich połączonych beczek i ponowne ich połączenie (używając powyższego).

Czy istnieje jakaś magiczna komenda, która będzie znaleźć wszystkie beczki, która homebrew myśli, są połączone tak, że można je ponownie połączyć?

Loop Space
źródło
Użyłem Migration Assistant, aby przenieść „wszystko” ze starego Maca na nowy, a także straciłem wszystkie moje domowe łącza symboliczne. Denerwujący.
Grav

Odpowiedzi:

38

/usr/local/Library/LinkedKegs wydaje się zawierać listę dobrze połączonych beczek, więc powinno to załatwić sprawę:

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

/usr/local/libPrzed skorzystaniem z tej opcji zalecamy ponowne sprawdzenie uprawnień do zapisu .

mike__t
źródło
Jestem całkiem pewien, że to właśnie przywróciło mój homebrew do pracy. Dzięki!
Robert Massaioli
Niesamowite, dziękuję :) właśnie to zrobiłem, jeśli nie masz nic przeciwko, jestem całkiem pewien, że nie jesteśmy jedynymi, którzy napotkali
Stone Alessandro
1
Nie rób --force! brew linkpowinno być wystarczające, a niektóre beczki naprawdę nie powinny być połączone (ponieważ mogą powodować konflikt z bibliotekami systemowymi), podczas gdy --forcewymuszą ich połączenie.
Chris Jefferson
Huh Wygląda na to, że również usunąłem /usr/local/Library.
Kyle Strand
58

To polecenie bash (pobrane stamtąd ) rozłączy wszystkie zainstalowane formuły, a następnie ponownie je połączy:

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

Myślę, że wszystkie formuły muszą być połączone, w przeciwnym razie, którekolwiek narzędzie zależy od nich, nie będzie w stanie ich znaleźć.

nuc
źródło
Nie jestem pewien, czy wszystkie formuły muszą być połączone. Niektóre są oparte tylko na beczce, ale nie wiem które, ponieważ niektóre zostały zainstalowane jako zależności innych.
Loop Space,
4
Wygląda na to, że otrzymujesz tylko kilka ostrzeżeń, takich jak „Ostrzeżenie: extempore jest tylko w beczce i musi być powiązane z --force”
Grav
2
Oto odpowiednik wersji używającej xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow
świetny w użyciu. Używam systemu Mac OS
10.12.6
8

Oprócz innych odpowiedzi na to pytanie może być również konieczne ponowne połączenie formuły z zainstalowanymi wieloma wersjami ( brew linknie zrobisz tego za Ciebie).

Najpierw ponownie połącz wszystkie formuły, które możesz:

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

Następnie uruchom brew doctor, który powinien narzekać i dać ci dwie listy:

  • Niepowiązane formuły z wieloma wersjami
  • Formuły zawierające wyłącznie beczki, które zostały niepoprawnie połączone przez oryginalny proces ponownego łączenia.

Dla każdej formuły z wieloma wersjami uruchom następujące polecenie, zastępując „python” nazwą formuły:

brew info python  

To pokaże między innymi wszystkie zainstalowane wersje. Wybierz wersję, którą chcesz połączyć (dla mnie to 2.7.6) i użyjbrew switch

brew switch python 2.7.6

Będziesz także chciał uruchomić brew unlinkna liście (jeśli istnieje) połączonych formuł zawierających tylko beczkę.

Scott Ritchie
źródło