Yêu cầu cài đặt chương trình sau khi chương trình 'x' hiện chưa được cài đặt


18

Nếu bạn cố gắng thực hiện một chương trình chưa được cài đặt, bạn sẽ nhận được một tin nhắn

The program 'x' is currently not installed. You can install it by typing: 
sudo apt-get install x

và thay vì đề nghị bạn cài đặt chương trình cho bạn, bạn phải gõ lệnh thực tế. Làm thế nào có thể thay đổi hành vi này?

Câu trả lời:


17

Gói chịu trách nhiệm cho hành vi này là gói không tìm thấy lệnhCài đặt lệnh không tìm thấy và nó đã bao gồm hành vi mong muốn mặc dù nó bị tắt theo mặc định. Bạn có thể kích hoạt nó bằng cách thêm dòng sau vào~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Bây giờ hành vi được thay đổi thành

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)

Lưu ý: Nếu bạn nhận được thông báo về sự cố python (cụ thể AttributeError: 'str' object has no attribute 'decode') thì đây là lỗi 1073919 . Một bản sửa lỗi đã có sẵn cho Rared và Saucy. Ngoài ra ( chỉ người dùng nâng cao ), bạn có thể thay đổi tệp /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py, xem diff được đính kèm với bugreport cho các dòng cần thay đổi.

Chỉnh sửa: Bản sửa lỗi hiện được phát hành trong phiên bản 0.3ubfox7.1 trong Rared (SRU) và cho 0.3ubfox8 trong Saucy.


1

Giải pháp của tôi là sự kết hợp giữa bảo mật và sự thoải mái:

auto-apt kiểm tra quyền truy cập tệp của các chương trình đang chạy trong môi trường của nó và nếu một chương trình cố gắng truy cập một tệp được biết là thuộc gói đã gỡ cài đặt, auto-apt sẽ cài đặt gói đó bằng apt-get. Tính năng này yêu cầu apt và sudo để làm việc. Nó cũng cung cấp cơ sở dữ liệu đơn giản để tìm kiếm gói nào chứa tệp được yêu cầu.

Đó là trình giả lập thiết bị đầu cuối nơi bạn vào môi trường nơi mỗi lần truy cập tệp được xác minh trước bằng tay tự động và nếu nó không tồn tại, nó sẽ tìm kiếm trong cơ sở dữ liệu (a la apt-file) và tải xuống và cài đặt gói mong muốn, sau đó cho phép chương trình tiếp tục . Bạn nên thực thi nó dưới quyền root:

sudo auto-apt

Điều này hữu ích trong trường hợp bạn đang xây dựng một gói và không có tâm trạng đứng trước màn hình để tìm từng lỗi cấu hình cho các tiêu đề bị thiếu, v.v.

Điều này cũng có thể được sử dụng như là sự thay thế apt-get + apt-file nơi bạn có thể cài đặt các chương trình chỉ cần yêu cầu commandthực thi nó.

Bạn phải hiểu rằng bạn không nên để nó mở khi hệ thống của bạn không nhìn, vì nó gần như là bạn đang sử dụng người dùng root.

Trang người đàn ông: http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt


0

Tự động cài đặt sẽ là một ý tưởng tồi. Nếu bạn muốn lưu một số cách gõ, bạn có thể sử dụng

sudo apt-get install !!

nơi !!sẽ được thay thế bởi lệnh cuối cùng từ lịch sử. Bạn có thể cũng có thể biến nó thành bí danh, nhưng tôi không biết cách thêm !!mà không đánh giá nó.

Có một số hãy cẩn thận, như được đề cập bởi @ eliah-kagan và @gertvdijk trong các bình luận. Một số chương trình không có cùng tên gói như nhị phân bạn sẽ thực hiện. Ngoài ra, khi chuyển đối số sang nhị phân, điều này có thể dẫn đến một số kết quả không mong muốn.


Chắc chắn, tôi biết rằng đề xuất của tôi không phải là một giải pháp tuyệt vời, nhưng nó có thể hoạt động "đủ tốt" dựa trên nhu cầu của người dùng.
l3dx

5
Tên lệnh (tên tệp của nhị phân trên hệ thống) không nhất thiết phải giống với tên của gói.
gertvdijk

3
l3dx: Mặc dù tôi vẫn có những hiểu lầm của mình (bao gồm quan điểm của @ gertvdijk rằng tên gói và tên lệnh thường khác nhau, cũng như lo ngại về tác động rất xấu của các đối số dòng lệnh bổ sung được truyền cho lệnh ban đầu), có vẻ như bạn đang ở trên một cái gì đó . Sau một chút thử nghiệm, có vẻ như nó hoạt động tốt hơn trong thực tế so với (tôi nghĩ) nó hoạt động trên lý thuyết. Tôi vẫn khuyên bạn nên mở rộng câu trả lời này để làm rõ, cảnh báo và có lẽ để chi tiết các tùy chọn khác. Trong mọi trường hợp, tôi đã hạ cấp này, nhưng đã loại bỏ downvote của tôi.
Eliah Kagan

0

Có một vài phương pháp để nhanh chóng cài đặt gói đề xuất:

  • Thêm export COMMAND_NOT_FOUND_INSTALL_PROMPT=1vào một nơi nào đó như~/.bashrc

    Đây là cách "tuyệt vời nhất", mặc dù rõ ràng là không an toàn lắm, nhưng có lẽ 90% thời gian sẽ gợi ra một câu "Cảm ơn, đó chính xác là những gì tôi muốn bạn làm!" phản ứng.

    (Một nhược điểm cá nhân của phương pháp này là tôi dường như tìm thấy câu trả lời khó nhớ / tìm kiếm, vì vậy tôi có xu hướng không sử dụng nó cho đến nay.)

  • Nếu bạn đang sử dụng Terminal mặc định, bạn có thể nhanh chóng chọn dòng và nhấp chuột giữa để dán trực tiếp vào dòng lệnh. (Các thiết bị đầu cuối hoặc ứng dụng SSH khác có thể có các phương thức khác nhau.)

    Trong thực tế, tôi có xu hướng tìm thấy điều này đủ nhanh, và hơi khó thực hiện "vô tình", và không yêu cầu bất kỳ thiết lập nào trước đó, mà tôi có xu hướng làm điều đó thay vào đó.

  • Tuy nhiên, có một điều cần nói - nếu bạn có thể (hoặc muốn học) gõ nhanh - để gõ sudo apt install packagenametrực tiếp.

    Nó giúp bạn rèn luyện trí nhớ cơ bắp và cũng có nghĩa là bạn phải đọc và nhập tên gói, nghĩa là bạn có khả năng nhớ nó dễ dàng hơn trong tương lai. Nó cũng dễ dàng hơn một chút trong các phiên bản Ubuntu gần đây hơn, bởi vì apthoạt động thay thế apt-get.


1
Bạn có thể có nghĩa là ~/.bashrcthay vì ~/.bash_rc.
edwinksl

Cảm ơn, tôi có lẽ đã nghĩ đến .bash_profile.
mwfearnley
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.