Poproś o instalację programu po „Program„ x ”nie jest obecnie zainstalowany”

18

Jeśli spróbujesz uruchomić program, który nie jest zainstalowany, pojawi się komunikat

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

i zamiast zaoferować ci instalację programu, musisz wpisać właściwe polecenie. Jak można zmienić to zachowanie?

Gerhard Burger
źródło

Odpowiedzi:

17

Pakiet, który jest odpowiedzialny za to zachowanie jest command-not-foundZainstaluj polecenie nie znaleziono pakiet, a to już zawiera pożądane zachowanie chociaż jest domyślnie wyłączone. Możesz go włączyć, dodając do swojego wiersza następujący wiersz~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Teraz zachowanie zostało zmienione na

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)

Uwaga: Jeśli pojawi się komunikat o awarii Pythona (szczególnie AttributeError: 'str' object has no attribute 'decode'), to jest to błąd 1073919 . Poprawka jest już dostępna dla Raring i Saucy. Alternatywnie ( tylko dla zaawansowanych użytkowników ) możesz zmienić plik /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py, zobacz różnicę dołączoną do raportu o błędach dla linii, które należy zmienić.

Edycja: Poprawka jest teraz wydana w wersji 0.3ubuntu7.1 w Raring (SRU) i dla 0.3ubuntu8 w Saucy.

Gerhard Burger
źródło
1

Moje rozwiązanie to hybryda bezpieczeństwa i wygody:

auto-apt sprawdza dostęp do plików programów działających w jego środowiskach, a jeśli program spróbuje uzyskać dostęp do pliku, o którym wiadomo, że należy do odinstalowanego pakietu, auto-apt zainstaluje ten pakiet za pomocą apt-get. Ta funkcja wymaga apt i sudo do działania. Zapewnia również prostą bazę danych do wyszukiwania, który pakiet zawiera żądany plik.

Jest to emulator terminala, w którym wchodzisz do środowiska, w którym każdy dostęp do pliku jest sprawdzany ręcznie przez auto-apt, a jeśli nie istnieje, przeszukuje bazę danych (la apt-file) i pobiera i instaluje żądany pakiet, a następnie pozwala programowi kontynuować . Powinieneś wykonać go jako root:

sudo auto-apt

Jest to przydatne w przypadkach, gdy budujesz pakiet i nie masz ochoty być przed ekranem, szukając każdego błędu konfiguracji brakujących nagłówków itp.

Może to również służyć jako zamiennik apt-get + apt-file, w którym można instalować programy, po prostu każąc commandje wykonać.

Musisz zrozumieć, że nie należy pozostawiać otwartego, gdy system nie jest wyglądany, ponieważ jest prawie tak, jakbyś używał użytkownika root.

Strona podręcznika : http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt

Braiam
źródło
0

Automatyczne instalowanie byłoby złym pomysłem. Jeśli chcesz zapisać trochę pisania, możesz użyć

sudo apt-get install !!

gdzie !!zostanie zastąpione ostatnim poleceniem z historii. Prawdopodobnie możesz to zrobić również jako alias, ale nie wiem, jak dodać !!bez oceny.

Istnieją jednak pewne zastrzeżenia, jak wspomniano w komentarzach @ eliah-kagan i @gertvdijk. Niektóre programy nie mają takiej samej nazwy pakietu, jak plik binarny, który można wykonać. Ponadto przekazanie argumentów do pliku binarnego może spowodować nieoczekiwane wyniki.

l3dx
źródło
Jasne, wiem, że moja sugestia nie jest świetnym rozwiązaniem, ale może działać „wystarczająco dobrze” w zależności od potrzeb użytkowników.
l3dx
5
Nazwy poleceń (nazwa pliku binarnego w systemie) niekoniecznie są takie same jak nazwa pakietu.
gertvdijk
3
l3dx: Mimo że nadal mam obawy (w tym stwierdzenie @ gertvdijk, że nazwy pakietów i poleceń są często różne, a także obawy związane z możliwymi bardzo złymi skutkami dodatkowych argumentów wiersza poleceń przekazanych do pierwotnego polecenia), wygląda na to, że coś Cię interesuje . Po kilku testach wydaje się, że działa to lepiej w praktyce niż (myślę) w teorii. Nadal zalecam rozszerzenie tej odpowiedzi w celu wyjaśnienia, ostrzeżenia i być może uszczegółowienia innych opcji. W każdym razie głosowałem za tym, ale usunąłem głosowanie.
Eliah Kagan
0

Istnieje kilka metod szybkiego instalowania sugerowanego pakietu:

  • Dodaj export COMMAND_NOT_FOUND_INSTALL_PROMPT=1do czegoś podobnego~/.bashrc

    jest to „najfajniejszy” sposób, choć oczywiście nie tak bezpieczny, ale prawdopodobnie 90% czasu wywoła wewnętrzne „Dzięki, właśnie tego chciałem, żebyś zrobił!” odpowiedź.

    (Jedną osobistą wadą tej metody jest to, że wydaje mi się, że odpowiedź jest trudna do zapamiętania / poszukiwania, więc zwykle nie używam jej zbyt często.)

  • Jeśli używasz domyślnego terminala, możesz szybko wybrać linię i kliknąć środkowym przyciskiem myszy, aby wkleić go bezpośrednio w linii poleceń. (Inne terminale lub aplikacje SSH mogą mieć różne metody).

    W praktyce uważam, że jest to wystarczająco szybkie i nieco trudniejsze do wykonania „przypadkowo” i bez konieczności wcześniejszej konfiguracji, że raczej to robię.

  • Jest jednak coś do powiedzenia - jeśli możesz (lub chcesz nauczyć się) pisać szybko - na sudo apt install packagenamebezpośrednie pisanie .

    Pomaga ćwiczyć pamięć mięśni, a także oznacza, że ​​musisz przeczytać i wpisać nazwę paczki, co oznacza, że ​​prawdopodobnie łatwiej ją zapamiętać w przyszłości. Jest to również nieco łatwiejsze w nowszych wersjach Ubuntu, ponieważ aptdziała zamiast apt-get.

mwfearnley
źródło
1
Prawdopodobnie miałeś na myśli ~/.bashrczamiast ~/.bash_rc.
edwinksl,
Dzięki, pewnie o tym myślałem .bash_profile.
mwfearnley,