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?


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.


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 ..


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.