Esiste un modo rapido per ricollegare i miei fusti homebrew?


61

Ho appena aggiornato il mio MacBook Air a Mavericks. Sembra che il processo abbia rimosso quasi tutti i collegamenti simbolici homebrewinseriti /usr/local/bin. Quando noto che mancano delle cose, le ricollego via brew unlink <keg> && brew link <keg>(anche se i collegamenti simbolici sono spariti, homebrewpenso ancora che siano lì, quindi devo unlinkprima). Questo sembra in qualche modo inefficiente.

Potrei semplicemente scorrere tutto dentro /usr/local/Cellarma non tutti i fusti sono collegati automaticamente e non voglio collegarli. Quindi la mia prossima ipotesi è di elencare tutti i fusti collegati e ricollegarli (usando quanto sopra).

C'è qualche comando magico che troverà tutti i fusti che homebrew pensa siano collegati in modo da poter ricollegarli?


Ho usato Migration Assistant per spostare "tutto" da un vecchio Mac a uno nuovo e ho anche perso tutti i miei link simbolici homebrew. Fastidioso.
Grav

Risposte:


39

/usr/local/Library/LinkedKegs sembra contenere un elenco di fusti collegati, quindi questo dovrebbe fare il trucco:

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

Ti consiglio di assicurarti di avere /usr/local/libnuovamente i permessi di scrittura prima di provare questo.


Abbastanza sicuro che questo abbia appena ripristinato il mio homebrew in ordine. Grazie!
Robert Massaioli,

Incredibile, grazie :) Ne ho appena fatto un'idea se non ti dispiace, sono abbastanza sicuro che non siamo i soli ad aver affrontato questo problema .. goo.gl/YTPMjh
Stone Alessandro

1
No, non farlo --force! brew linkdovrebbe essere sufficiente e alcuni fusti in realtà non dovrebbero essere collegati (poiché possono entrare in conflitto con le librerie di sistema), mentre --forceforzeranno il loro collegamento.
Chris Jefferson,

Huh. Sembra che anche io abbia cancellato /usr/local/Library.
Kyle Strand,

59

Questo comando bash (preso da ) scollegherà tutte le formule installate e quindi le collegherà di nuovo:

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

Immagino che tutte le formule debbano essere collegate, altrimenti, qualunque strumento dipenda da esse, non sarà in grado di trovarle.


Non sono sicuro che tutte le formule debbano essere collegate. Alcuni sono solo fusti, ma non so quale, poiché alcuni sono stati installati come dipendenze di altri.
Loop Space

4
Sembra che tu abbia appena ricevuto alcuni avvisi come "Attenzione: extempore è solo il barile e deve essere collegato con --force"
Grav

2
Ecco una versione equivalente usando xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow,

ottimo da usare. Sto usando mac OS
10.12.6

8

Oltre alle altre risposte a questa domanda, potrebbe essere necessario ricollegare la formula con più versioni installate ( brew linknon lo farà per te).

Innanzitutto ricollega tutte le formule che puoi:

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

Quindi esegui brew doctor, che dovrebbe lamentarsi e darti due elenchi:

  • Formule non collegate con più versioni
  • Formule solo per barili che sono state erroneamente collegate dal processo di ricollegamento originale.

Per ogni formula con più versioni eseguire quanto segue, sostituendo "python" con il nome della formula:

brew info python  

Questo ti mostrerà, tra le altre informazioni, tutte le versioni installate. Scegli quale versione vuoi collegare (per me la sua 2.7.6), e usabrew switch

brew switch python 2.7.6

Dovrai anche eseguire brew unlinkl'elenco (se presente) delle formule solo per il barile che sono state collegate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.