Wymuś apt-get, aby wyświetlał monit tak / nie

11

Czy istnieje sposób na wymuszenie apt-getwyświetlenia monitu o tak / nie? Istnieje --force-yesopcja, ale wydaje się, że nie ma żadnej --force-promptlub podobnej opcji. Jeśli spróbujesz zainstalować pakiet, który ma już wszystkie zależności, rozpocznie się instalacja bez wyświetlania monitu o tak / nie. Może to być uciążliwe, jeśli chcesz sprawdzić, czy istnieją zależności i które zostaną zainstalowane, ponieważ nie wiesz, czy potencjalne zależności zostaną zainstalowane wcześniej.

UWAGA: Kiedy „apt-get install” prosi mnie o potwierdzenie, czy chcę kontynuować, czy nie? jest nieco powiązany, ponieważ opisuje, w jakich standardowych warunkach wyświetlany jest monit. Interesuje mnie jednak, jak to wymusić.

użytkownik369450
źródło
1
„Może to być uciążliwe, jeśli chcesz sprawdzić, czy istnieją zależności i które zostaną zainstalowane.” Jestem tym zmieszany. Jeśli nie instalujesz żadnych zależności, co sprawdzasz?
Faheem Mitha
2
Interesujące pytanie. Wydaje się, że nie ma na to sposobu, bez łatania apt-getz odpowiednią opcją. Szczerze mówiąc, ta hipotetyczna opcja nie wydaje mi się bardzo przydatna.
Faheem Mitha
@FaheemMitha Moim celem jest to, aby o wiele łatwiej dowiedzieć się, jakie nowe zależności mogłyby / będą instalowane, apt-get installzamiast apt-cache showpkg.
user369450

Odpowiedzi:

10

Po prostu nie ma takiej możliwości przy obecnej implementacji apt-get, trzeba by otworzyć prośbę o funkcję i odwołać się do opiekuna. Obecne zachowanie apt-get polega na tym, że gdy lista pakietów, które domyślnie zadeklarowałeś do zainstalowania, jest równa liczbie pakietów, które zostaną zainstalowane, a żadne inne pakiety nie zostaną naruszone przez aktualizacje lub przerwy, apt-get zakłada, że ​​użytkownik już jest pewien, co zostanie zrobione , jeśli nie jesteś pewien lub chcesz przeanalizować, co zostanie zrobione bez faktycznej instalacji pakietu, możesz skorzystać z zalecenia Costas z -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Istnieją inne narzędzia, takie jak apt-listbugs, które analizowałyby wersje pakietów do zainstalowania przed ich faktyczną instalacją (w tym przypadku pod kątem błędów) i ostrzegały.

Braiam
źródło
4

Polecenie zakłada yestylko na wypadek zainstalowania jednego pakietu (który został zainicjowany z wiersza poleceń) ORAZ wszystkie zależności w systemie, tj. Nic do zainstalowania poza jednym zapytanym pakietem.

Innymi słowy „jeśli nie ma nic do zobaczenia (bez dodatkowych pakietów), to nie ma monitu (nie ma o co prosić)”.

Do celów testowych możesz użyć klucza -s, --simulate, --just-print, --dry-run, --recon, --no-act

Costas
źródło
@cpburnz, jeśli all dependecies are installedjuż nie zostaniesz promowany, więc żadne inne pakiety nie zostaną zainstalowane.
Costas
0

Widzę stare pytanie, ale teraz w podobnej sytuacji. Zwykle używam sudo aptitude install -P PACKAGE_NAME, o co zawsze pytam przed instalacją. Jednak teraz w domyślnym menedżerze pakietów Debiana jest apt|apt-geti nie ma tej funkcji. Oczywiście nadal mogę go zainstalować aptitudei używać ... Jednak napisałem małą funkcję / skrypt opakowujący sh / bash, o którą apt-getnależy zapytać przed instalacją. Jest naprawdę surowy i napisałem go jako funkcję w moim terminalu.

$ f () { sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf'; read -p 'Do You want to continue (y/N): ' ans; case $ans in [yY] | [yY][eE][sS]) sudo apt-get -y install "$@";; *);; esac; }

Teraz wyjaśnijmy:

f () {
  # Do filtered simulation - without lines contains 'Inst' and 'Conf'
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';

  # Interact with user - If You want to proceed and install package(s),
  # simply put 'y' or any other combination of 'yes' answer and tap ENTER.
  # Otherwise the answer will be always not to proceed.
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      # Because we said 'yes' I put -y to proceed with installation
      # without additional question 'yes/no' from apt-get 
      sudo apt-get -y install "$@";
    ;;
    *)
      # For any other answer, we just do nothing. That means we do not install
      # listed packages.
    ;;
  esac
}

Aby użyć tej funkcji jako skryptu sh / bash, po prostu utwórz plik skryptu, np. my_apt-get.shZ zawartością (Uwaga: lista nie zawiera komentarzy, aby była nieco krótsza ;-)):

#!/bin/sh

f () {
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      sudo apt-get -y install "$@";
    ;;
    *)

    ;;
  esac
}

f "$@"

Następnie włóż go np. Do ~/bin/i uruchom go za pomocą $ chmod u+x ~/bin/my_apt-get.sh. Jeśli katalog ~/binjest zawarty w PATHzmiennej, będziesz mógł ją wykonać po prostu przez:

$ my_apt-get.sh PACKAGE_NAME(S)_TO INSTALL

Proszę zanotować:

  • Kod używa sudo. Jeśli korzystasz z rootkonta, prawdopodobnie musisz je dostosować.
  • Kod nie obsługuje autouzupełniania powłoki
  • Nie mam pojęcia, jak kod działa z wzorcami powłoki (np. „!”, „*”, „?”, ...)
Michał Chabowski
źródło