Apakah ada cara cepat untuk menautkan kembali tong bir rumahan saya?

61

Saya baru saja memutakhirkan MacBook Air saya ke Mavericks. Proses tersebut tampaknya telah menghapus hampir semua symlink yang homebrewdimasukkan /usr/local/bin. Ketika saya melihat hal-hal yang hilang maka saya menghubungkan kembali melalui brew unlink <keg> && brew link <keg>(meskipun symlink hilang, homebrewmasih berpikir mereka ada di sana jadi saya harus unlinkterlebih dahulu). Ini terasa agak tidak efisien.

Saya hanya bisa mengulang semua yang ada di dalam /usr/local/Cellartetapi tidak semua tong secara otomatis terhubung dan saya tidak ingin menghubungkannya. Jadi tebakan saya berikutnya adalah mendaftar setiap tong yang terhubung dan menghubungkannya kembali (menggunakan yang di atas).

Apakah ada perintah sihir yang akan menemukan semua tong yang homebrew menurutnya terhubung sehingga saya dapat menghubungkan kembali mereka?

Loop Space
sumber
Saya menggunakan Migration Assistant untuk memindahkan "segalanya" dari Mac lama ke Mac baru, dan saya juga kehilangan semua symlink homebrew saya. Mengganggu.
Grav

Jawaban:

39

/usr/local/Library/LinkedKegs tampaknya berisi daftar, yang terkait dengan tong, jadi ini yang harus dilakukan:

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

Saya sarankan memastikan Anda memiliki izin menulis /usr/local/liblagi sebelum mencoba ini.

mike__t
sumber
Cukup yakin bahwa ini baru mengembalikan homebrew saya ke dalam urutan kerja. Terima kasih!
Robert Massaioli
Luar biasa, terima kasih :) hanya membuat intisari dari itu jika Anda tidak keberatan, saya cukup yakin bahwa kami bukan satu-satunya yang menghadapi masalah ini .. goo.gl/YTPMjh
Batu Alessandro
1
Tidak, jangan lakukan --force! brew linkharus memadai, dan beberapa tong benar-benar tidak boleh dihubungkan (karena dapat bertentangan dengan pustaka sistem), sedangkan --forceakan memaksa hubungan mereka.
Chris Jefferson
Hah. Sepertinya saya juga menghapus /usr/local/Library.
Kyle Strand
59

Perintah bash ini (diambil dari sana ) akan memutuskan tautan semua formula yang diinstal dan kemudian menautkannya lagi:

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

Saya kira semua rumus harus ditautkan, jika tidak, alat apa pun yang bergantung padanya, tidak akan dapat menemukannya ..

nuc
sumber
Saya tidak yakin bahwa semua rumus harus ditautkan. Beberapa hanya tong tetapi saya tidak tahu yang mana, karena beberapa diinstal sebagai dependensi yang lain.
Loop Space
4
Sepertinya Anda baru saja mendapatkan peringatan seperti "Peringatan: extempore hanya untuk tong dan harus dikaitkan dengan --force"
Grav
2
Ini versi yang setara menggunakan xargs:brew list -1 | xargs -I formula sh -c "brew unlink formula && brew link formula"
paulmelnikow
bagus untuk digunakan. Saya menggunakan 10.12.6 mac os
Raju yourPepe
8

Selain jawaban lain untuk pertanyaan ini, Anda mungkin juga perlu menautkan kembali rumus dengan beberapa versi yang diinstal ( brew linktidak akan melakukan ini untuk Anda).

Pertama, taut ulang semua formula yang Anda bisa:

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

Kemudian jalankan brew doctor, yang seharusnya mengeluh dan memberi Anda dua daftar:

  • Formula yang tidak ditautkan dengan beberapa versi
  • Rumus hanya tong yang ditautkan secara tidak benar oleh proses penghubungan kembali yang asli.

Untuk setiap rumus dengan beberapa versi, jalankan yang berikut, ganti "python" dengan nama rumus:

brew info python  

Ini akan menunjukkan kepada Anda, di antara informasi lainnya, semua versi yang diinstal. Pilih versi mana yang ingin Anda tautkan (untuk saya versi 2.7.6), dan gunakanbrew switch

brew switch python 2.7.6

Anda juga ingin menjalankan brew unlinkpada daftar (jika ada) formula hanya-tong yang telah ditautkan.

Scott Ritchie
sumber