¿Hay una manera rápida de volver a vincular mis barriles caseros?

61

Acabo de actualizar mi MacBook Air a Mavericks. El proceso parece haber eliminado casi todos los enlaces simbólicos que se homebrewintrodujeron /usr/local/bin. Cuando noto que faltan cosas, las vuelvo a vincular brew unlink <keg> && brew link <keg>(aunque los enlaces simbólicos desaparecieron, homebrewtodavía creo que están allí, así que unlinkprimero tengo que hacerlo ). Esto se siente algo ineficiente.

Simplemente podría recorrer todo /usr/local/Cellarpero no todos los barriles están vinculados automáticamente y no quiero vincularlos. Entonces, mi siguiente suposición es enumerar cada barril vinculado y volver a vincularlos (usando lo anterior).

¿Hay algún comando mágico que encuentre todos los barriles que homebrew cree que están vinculados para que pueda volver a vincularlos?

Espacio de bucle
fuente
Utilicé el Asistente de migración para mover "todo" de una Mac vieja a una nueva, y también perdí todos mis enlaces simbólicos homebrew. Molesto.
Grav

Respuestas:

39

/usr/local/Library/LinkedKegs parece contener una lista de, bueno, barriles vinculados, por lo que esto debería hacer el truco:

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

Recomiendo asegurarse de que tiene permisos de escritura /usr/local/libnuevamente antes de intentar esto.

mi____t
fuente
Estoy bastante seguro de que esto acaba de restaurar mi homebrew en funcionamiento. ¡Gracias!
Robert Massaioli
Increíble, gracias :) acabo de entenderlo si no te importa, estoy bastante seguro de que no somos los únicos que enfrentamos este problema ... goo.gl/YTPMjh
Stone Alessandro
1
No, no lo hagas --force! brew linkdebería ser suficiente, y algunos barriles realmente no deberían estar vinculados (ya que pueden entrar en conflicto con las bibliotecas del sistema), mientras --forceque forzarán su vinculación.
Chris Jefferson
Huh Parece que también lo borré /usr/local/Library.
Kyle Strand
59

Este comando bash (tomado de allí ) desenlazará todas las fórmulas instaladas y luego las vinculará nuevamente:

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

Supongo que todas las fórmulas deben estar vinculadas, de lo contrario, cualquier herramienta que dependa de ellas, no podrá encontrarlas.

nuc
fuente
No estoy seguro de que todas las fórmulas necesiten estar vinculadas. Algunos son solo de barril pero no sé cuál, ya que algunos se instalaron como dependencias de otros.
Loop Space
44
Parece que solo recibes algunas advertencias como "Advertencia: extempore es solo de barril y debe vincularse con --force"
Grav
2
Aquí hay una versión equivalente usando xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow
Genial para usar. Estoy usando 10.12.6 mac os
Raju yourPepe
8

Además de las otras respuestas a esta pregunta, es posible que deba volver a vincular la fórmula con varias versiones instaladas ( brew linkno lo hará por usted).

Primero, vuelva a vincular todas las fórmulas que pueda:

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

Luego corre brew doctor, que debería quejarse y darte dos listas:

  • Fórmulas desvinculadas con múltiples versiones
  • Fórmulas de solo barril que se han vinculado incorrectamente por el proceso de vinculación original.

Para cada fórmula con múltiples versiones, ejecute lo siguiente, reemplazando "python" con el nombre de la fórmula:

brew info python  

Esto le mostrará, entre otra información, todas las versiones instaladas. Elija qué versión desea vincular (para mí es 2.7.6) y usebrew switch

brew switch python 2.7.6

También querrá ejecutar brew unlinken la lista (si la hay) de fórmulas solo de barril que se han vinculado.

Scott Ritchie
fuente