Existe-t-il un moyen rapide de relier mes fûts homebrew?

61

Je viens de mettre à niveau mon MacBook Air vers Mavericks. Le processus semble avoir supprimé presque tous les liens symboliques homebrewmis en place /usr/local/bin. Quand je remarque des choses qui manquent, je les resserre via brew unlink <keg> && brew link <keg>(bien que les liens symboliques aient disparu, homebrewils pensent toujours qu'ils sont là, donc je dois d' unlinkabord). Cela semble un peu inefficace.

Je pourrais tout faire en boucle, /usr/local/Cellarmais tous les fûts ne sont pas automatiquement liés et je ne veux pas les lier. Donc, la prochaine chose à faire est de lister chaque fût lié et de le relier (en utilisant ce qui précède).

Y at - il une commande magique qui trouveront tous les barillets qui homebrew PENSE sont liés pour que je puisse les lier à nouveau?

Espace de boucle
la source
J'ai utilisé Migration Assistant pour déplacer "tout" d'un ancien Mac à un nouveau, et j'ai également perdu tous mes liens symboliques homebrew. Ennuyeux.
Grav

Réponses:

39

/usr/local/Library/LinkedKegs semble contenir une liste de fûts liés, ce qui devrait faire l'affaire:

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

Je vous recommande de vous assurer que vous avez les autorisations d'écriture à /usr/local/libnouveau avant d'essayer cela.

mike__t
la source
Je suis sûr que cela vient de remettre mon homebrew en état de fonctionner. Merci!
Robert Massaioli
Incroyable, merci :) viens d'en faire l'essentiel si ça ne vous dérange pas, je suis presque sûr que nous ne sommes pas le seul à avoir affronté ce problème .. goo.gl/YTPMjh
Stone Alessandro
1
Non, ne fais pas --force! brew linkdevrait être suffisant, et certains fûts ne devraient vraiment pas être liés (car ils peuvent entrer en conflit avec les bibliothèques système), alors --forcequ'ils forceraient leur liaison.
Chris Jefferson
Huh. On dirait que j'ai aussi supprimé /usr/local/Library.
Kyle Strand
59

Cette commande bash (prise à partir de ) va dissocier toutes les formules installées et les lier à nouveau:

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

Je suppose que toutes les formules doivent être liées, sinon, quel que soit l'outil qui en dépend, vous ne pourrez pas les trouver ..

nuc
la source
Je ne suis pas sûr que toutes les formules doivent être liées. Certains sont réservés aux fûts, mais je ne sais pas lequel, car certains ont été installés en tant que dépendances d’autres.
Loop Space
4
Il semble que vous n'ayez que des avertissements du type "Avertissement: l'extempore est réservé aux fûts et doit être associé à --force"
Grav
2
Voici une version équivalente utilisant xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow le
super à utiliser. J'utilise 10.12.6 mac os
Raju yourPepe
8

Outre les autres réponses à cette question, vous devrez peut-être aussi relier une formule avec plusieurs versions installées ( brew linkcela ne fonctionnera pas pour vous).

Tout d’abord, reliez toutes les formules que vous pouvez:

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

Puis lancez brew doctor, ce qui devrait vous plaindre et vous donner deux listes:

  • Formules non liées avec plusieurs versions
  • Les formules contenant uniquement des fûts qui ont été incorrectement liées par le processus de création de liens d'origine.

Pour chaque formule comportant plusieurs versions, exécutez ce qui suit en remplaçant "python" par le nom de la formule:

brew info python  

Cela vous montrera, entre autres informations, toutes les versions installées. Choisissez la version que vous voulez lier (pour moi sa 2.7.6), et utilisezbrew switch

brew switch python 2.7.6

Vous voudrez également exécuter brew unlinksur la liste (le cas échéant) des formules uniquement en fûts qui ont été liées.

Scott Ritchie
la source