Примушуйте apt-get, щоб запросити так / ні


11

Чи є спосіб змусити apt-getвідображати підказку так / ні? --force-yesВаріант існує, але, схоже , немає --force-promptабо подібний варіант. Якщо ви спробуєте встановити пакет, у якому вже встановлені всі залежності, він почне установку, не відображаючи підказку так / ні. Це може викликати занепокоєння, якщо ви хочете перевірити, чи існують залежності, а які будуть встановлені, оскільки ви не знаєте, чи встановлені потенційні залежності достроково.

ПРИМІТКА. Коли "apt-get install" просить мене підтвердити, хочу я продовжувати чи ні? дещо пов'язаний тим, що він описує, при яких стандартних умовах відображається підказка. Мені цікаво знати, як це змусити.


1
"Це може набриднути, якщо ви хочете перевірити, чи існують залежності та які будуть встановлені." Мене це бентежить. Якщо не встановлюються залежності, що ви переглядаєте?
Faheem Mitha

2
Цікаве запитання. Здається, немає способу зробити це, якщо не виправити apt-getвідповідний варіант. Однак цей гіпотетичний варіант не здається мені дуже корисним, відверто кажучи.
Faheem Mitha

@FaheemMitha Моя мета для цього полягає в тому, що набагато простіше з’ясувати, які нові залежності можна було б / встановити, використовуючи, apt-get installа не apt-cache showpkg.
користувач369450

Відповіді:


10

Це просто немає можливості зробити це з поточною реалізацією apt-get, вам потрібно буде відкрити запит на функцію та звернутися до технічного обслуговування. Поточна поведінка apt-get полягає в тому, що коли список пакунків, які ви неявно оголосили, що встановлені, дорівнює кількості пакетів, які будуть встановлені, і жодні інші пакети не впливають на оновлення або перерви, apt-get припускає користувача вже Ви впевнені в тому, що буде зроблено , якщо Ви не впевнені або хочете проаналізувати, що буде зроблено без фактичної установки пакета, Ви можете скористатися рекомендацією Costas від -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Є й інші інструменти, такі як apt-listbugs, які аналізували б версії пакунків, які потрібно встановити, перш ніж ви їх фактично встановите (у цьому випадку для помилок) та попередили вас.


4

Команда припускає yesлише у випадку встановлення одного пакета (який ініціюється з командного рядка) І всіх залежностей у системі, тобто тобто нічого встановити, окрім одного запитуваного пакета.

Іншим словом "якщо нічого не бачити (немає додаткових пакунків), тоді немає запиту (нічого просити)".

Для тестування ви можете використовувати ключ -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz, якщо all dependecies are installedвже вас не повідомили, то будь-які інші пакети не будуть встановлені.
Костас

0

Я можу бачити старе питання, але зараз у подібній ситуації. Зазвичай я використовую sudo aptitude install -P PACKAGE_NAMEте, що завжди прошу перед установкою. Однак зараз у Debian менеджер пакунків за замовчуванням є, apt|apt-getі він не має цієї функціональності. Звичайно, я все ще можу встановити aptitudeта використовувати його ... Однак я написав невелику функцію / сценарій обгортки sh / bash для apt-getзапитання перед установкою. Це дійсно сиро, і я записав це як функцію в свій термінал.

$ 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 () {
  # 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
}

Щоб використовувати цю функцію як скрипт sh / bash, просто створіть файл сценарію, наприклад, my_apt-get.shіз вмістом (Примітка: список не містить коментарів, щоб зробити його трохи коротшим ;-)):

#!/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 "$@"

Потім поставте його, наприклад, у ~/bin/і зробіть його виконуваним $ chmod u+x ~/bin/my_apt-get.sh. Якщо каталог ~/binвключений у вашу PATHзмінну, ви зможете виконати його просто:

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

Будь ласка, запиши:

  • Код все-таки використовується sudo. Якщо ви користуєтесь rootобліковим записом, вам, ймовірно, потрібно відрегулювати його.
  • Код не підтримує автоматичне завершення оболонки
  • Поняття не маю, як працює код з візерунками оболонок (наприклад, "!", "*", "?", ...)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.