Đã cài đặt sqlite3 v3.8, nhưng thiết bị đầu cuối mac vẫn chạy phiên bản cũ 3.6 theo mặc định


9

Tôi có máy Mac chạy OS X 10.6.8, được cài đặt sẵn SQLite3 v3.6. Tôi đã cài đặt v3.8 bằng homebrew. Nhưng khi tôi gõ "sqlite3" trong thiết bị đầu cuối của mình, nó tiếp tục chạy phiên bản cài đặt sẵn cũ. Có ai giúp đỡ không?

Không chắc chắn nếu biến PATH có liên quan gì đến nó không, nhưng chạy echo $ PATH sẽ dẫn đến kết quả sau: bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Và phiên bản MỚI của SQLite3 nằm trong thư mục sau: / usr / local / Cellar / sqlite

Tôi nên thêm rằng tôi cũng đã tải xuống tệp thực thi nhị phân vào máy tính để bàn của mình và nó hoạt động nếu tôi nhấp từ máy tính để bàn của mình, nhưng không hoạt động từ thiết bị đầu cuối.

Mọi sự trợ giúp sẽ rất được trân trọng?

Câu trả lời:


2

$ PATH

Có, bạn cần đặt PATHbiến của mình như vậy:

$ 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

Dòng đó có thể hơi khó đọc, vì vậy ở đây nó được chia ra bởi các dấu hai chấm và mỗi đường dẫn nằm trên một dòng riêng:

$ 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

Đây $PATHlà danh sách các thư mục - được phân tách bằng dấu hai chấm ( :) - mà shell tìm kiếm từng cái một để tìm kiếm những gì bạn vừa gõ vào dấu nhắc. Thứ tự quan trọng vì vậy nếu sqlitexuất hiện ở nhiều vị trí thì thư mục đầu tiên được tìm thấy là nơi nó sẽ được sử dụng.

đồ đạc ở đâu

Bạn có thể sử dụng typelệnh để xem ứng dụng cụ thể đến từ đâu.

Ví dụ

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

Đây là tôi đang sử dụng nó với công -atắc sẽ hiển thị tất cả các lần xuất hiện:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Điều đó đã làm việc! Cảm ơn bạn rất nhiều. Tôi không biết làm thế nào để thêm nhiều đường dẫn vào câu lệnh. Bây giờ rõ ràng họ chỉ cách nhau bởi ":"
BandfuzzAlex

@ user46531 - rất vui vì vấn đề của bạn đã được giải quyết. Cảm ơn câu hỏi.
slm

@ user46531 trong khi khả thi, đây là giải pháp không chính xác. xem câu trả lời của tôi
strugee

11

giải pháp của slm thực sự không chính xác (trong khi có thể sử dụng). Khi sử dụng Homebrew, bạn không nên thêm /usr/local/Cellar/*vào $ PATH của mình; thay vào đó, những gì bạn nên làm là bạn nên thêm /usr/local/binvào $ PATH (mà bạn đã thực hiện) và sau đó liên kết những thứ trong Hầm vào /usr/local/bin. Vì được thiết kế theo cách này, Homebrew rõ ràng có thể thực hiện việc này khá dễ dàng cho bạn:

brew link sqlite

sẽ tự động tạo ra các liên kết cần thiết. (Homebrew đã không làm điều này tự động cho bạn lần này vì sqlite chỉ dành cho bạn, nghĩa là bạn cần phải làm thủ công).

Là một lưu ý phụ / nhắc nhở thân thiện, bạn không bao giờ nên thêm /usr/local/binvào đường dẫn hệ thống, chỉ đường dẫn người dùng của bạn. Đây là trong trường hợp các chương trình mong đợi sqlite do Apple cung cấp nhưng tìm phiên bản do Homebrew cung cấp, gây ra sự cố.


1
Có thể không phải là một ý tưởng tốt. brew link sqlite: "Cảnh báo: sqlite chỉ có keg và phải được liên kết với --force"
Marcelo Cantos

Vâng, những hậu quả tiêu cực (nếu có) của việc liên kết nó là gì? Điều gì có thể phá vỡ? Họ thực sự nên đưa ra một số dấu hiệu về điều đó trong thông điệp cảnh báo.
iconoclast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.