Menginstal sqlite3 v3.8, tetapi terminal mac masih menjalankan versi lama 3.6 secara default

9

Saya memiliki Mac yang menjalankan OS X 10.6.8, yang sudah diinstal sebelumnya dengan SQLite3 v3.6. Saya menginstal v3.8 menggunakan homebrew. Tetapi ketika saya mengetik "sqlite3" di terminal saya, ia terus menjalankan versi pra-instal lama. Ada bantuan?

Tidak yakin apakah variabel PATH ada hubungannya dengan itu, tetapi menjalankan echo $ PATH menghasilkan sebagai berikut: /usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Dan versi BARU dari SQLite3 ada di direktori berikut: / usr / local / Cellar / sqlite

Saya harus menambahkan bahwa saya juga mengunduh biner yang dapat dieksekusi ke desktop saya, dan itu berfungsi jika saya mengklik dari desktop saya, tetapi tidak berfungsi dari terminal.

Setiap bantuan akan sangat dihargai?

BandfuzzAlex
sumber

Jawaban:

2

$ PATH

Ya, Anda perlu mengatur PATHvariabel seperti:

$ export PATH=/usr/local/Cellar/sqlite:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Baris itu bisa agak sulit dibaca sehingga di sini ia dibagi oleh titik dua, dan setiap jalur ada di barisnya sendiri:

$ awk -v addPath="$1" 'BEGIN{RS=":";ORS=addPath "\n"}{$1=$1}1' <<< $PATH
/usr/local/Cellar/sqlite
/usr/local/bin
/Library/Frameworks/Python.framework/Versions/2.7/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/X11/bin

Ini $PATHadalah daftar direktori - dipisahkan oleh titik dua ( :) - yang dicari oleh shell satu per satu untuk mencari apa yang baru saja Anda ketikkan pada prompt. Urutan penting jadi jika sqlitemuncul di beberapa lokasi direktori pertama di mana ia ditemukan adalah dari mana ia akan digunakan.

di mana hal-hal berada?

Anda dapat menggunakan typeperintah untuk melihat dari mana aplikasi tertentu berasal.

Contohnya

$ type -a sqlite3 
sqlite3 is /usr/bin/sqlite3

Inilah yang saya gunakan dengan -asakelar yang akan menampilkan semua kejadian:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
slm
sumber
Itu berhasil! Terima kasih banyak. Saya tidak tahu bagaimana cara menambahkan beberapa jalur ke dalam pernyataan. Sekarang jelas mereka hanya dipisahkan oleh ":"
BandfuzzAlex
@ user46531 - senang masalah Anda teratasi. Terima kasih untuk pertanyaannya.
slm
@ user46531 selagi bisa diterapkan, ini adalah solusi yang salah. lihat jawaban saya.
strugee
11

solusi slm sebenarnya salah (selagi bisa digunakan). Saat menggunakan Homebrew, Anda sebaiknya tidak menambahkan /usr/local/Cellar/*$ PATH Anda; bukan apa yang harus Anda lakukan adalah Anda harus menambahkan /usr/local/binke $ PATH Anda (yang telah Anda lakukan), dan hal yang kemudian symlink di Cellar menjadi /usr/local/bin. Karena dirancang seperti ini, Homebrew jelas dapat melakukan ini dengan mudah untuk Anda:

brew link sqlite

secara otomatis akan membuat tautan yang dibutuhkan. (Homebrew tidak melakukan ini secara otomatis untuk Anda saat ini karena sqlite hanya untuk tong, artinya Anda perlu melakukannya secara manual).

Sebagai pengingat samping / ramah, Anda tidak boleh menambahkan /usr/local/binke jalur sistem, hanya jalur pengguna Anda. Ini dalam kasus program mengharapkan sqlite yang disediakan Apple tetapi menemukan versi yang disediakan oleh Homebrew, menyebabkan masalah.

strugee
sumber
1
Mungkin bukan ide yang bagus. brew link sqlite: "Peringatan: sqlite hanya untuk tong dan harus dikaitkan dengan --force"
Marcelo Cantos
Ya — apa konsekuensi negatif (jika ada) dari menautkannya secara paksa? Apa yang bisa pecah? Mereka benar-benar harus memberikan indikasi tentang hal itu dalam pesan peringatan.
iconoclast