Existe uma maneira rápida de vincular novamente meus barris de cerveja caseira?

61

Acabei de atualizar meu MacBook Air para o Mavericks. O processo parece ter removido quase todos os links simbólicos homebrewinseridos /usr/local/bin. Quando percebo que as coisas estão faltando, eu as vinculo novamente brew unlink <keg> && brew link <keg>(embora os links simbólicos tenham sumido, homebrewainda acho que eles estão lá, então eu preciso unlinkprimeiro). Isso parece um pouco ineficiente.

Eu poderia simplesmente percorrer tudo, /usr/local/Cellarmas nem todos os barris são automaticamente vinculados e não quero vinculá-los. Portanto, meu próximo palpite é listar todos os barris vinculados e vinculá-los novamente (usando o acima).

Existe algum comando mágico que encontrará todos os barris que homebrew pensam estarem ligados para que eu possa vinculá-los novamente?

Espaço em loop
fonte
Usei o Migration Assistant para mover "tudo" de um Mac antigo para um novo, e também perdi todos os links simbólicos do homebrew. Irritante.
Grav

Respostas:

39

/usr/local/Library/LinkedKegs parece conter uma lista de barris bem vinculados, portanto, isso deve fazer o truque:

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

Eu recomendo garantir que você tenha permissões de gravação /usr/local/libnovamente antes de tentar isso.

mike__t
fonte
Tenho certeza de que isso acabou de restaurar meu homebrew em bom estado de funcionamento. Obrigado!
Robert Massaioli
Incrível, obrigado :) acabou de fazer um resumo, se você não se importa, tenho certeza de que não somos os únicos que enfrentaram esse problema .. goo.gl/YTPMjh
Stone Alessandro
11
Não, não faça --force! brew linkdeve ser suficiente, e alguns barris realmente não devem estar vinculados (pois podem entrar em conflito com as bibliotecas do sistema), ao passo --forceque forçarão seu vínculo.
Chris Jefferson
Hã. Parece que eu também apaguei /usr/local/Library.
Kyle Strand
59

Este comando bash (retirado de ) desvinculará todas as fórmulas instaladas e as vinculará novamente:

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

Eu acho que todas as fórmulas precisam ser vinculadas, caso contrário, qualquer ferramenta que depende delas, não será capaz de encontrá-las.

nuc
fonte
Não tenho certeza de que todas as fórmulas precisam estar vinculadas. Alguns são apenas para barris, mas não sei qual, pois alguns foram instalados como dependências de outros.
Loop Space
4
Parece que você acabou de obter alguns avisos como "Aviso: extempore é barril-only e deve ser vinculado com force"
Grav
2
Aqui está uma versão equivalente usando o xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow
ótimo de usar. Estou usando o 10.12.6 mac os
Raju yourPepe
8

Além das outras respostas a esta pergunta, você também pode precisar vincular novamente a fórmula com várias versões instaladas ( brew linknão fará isso por você).

Primeiro, vincule novamente todas as fórmulas que você pode:

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

Em seguida brew doctor, execute , o que deve reclamar e fornecer duas listas:

  • Fórmulas não vinculadas com várias versões
  • Fórmulas somente de barril que foram incorretamente vinculadas pelo processo original de revinculação.

Para cada fórmula com várias versões, execute o seguinte, substituindo "python" pelo nome da fórmula:

brew info python  

Isso mostrará, entre outras informações, todas as versões instaladas. Escolha qual versão você deseja vincular (para mim é 2.7.6) e usebrew switch

brew switch python 2.7.6

Você também deseja executar brew unlinkna lista (se houver) de fórmulas apenas de barril que foram vinculadas.

Scott Ritchie
fonte