Принудительно apt-get подскажет да / нет


11

Есть ли способ заставить apt-getотображать да / нет подсказку? --force-yesВариант существует, но, похоже , нет --force-promptили подобный вариант. Если вы попытаетесь установить пакет, в котором уже установлены все зависимости, он начнет установку без отображения запроса «да / нет». Это может быть неприятно, если вы хотите проверить, существуют ли зависимости и какие из них будут установлены, потому что вы не знаете, установлены ли потенциальные зависимости раньше времени.

ПРИМЕЧАНИЕ. Когда «apt-get install» просит меня подтвердить, хочу ли я продолжить или нет? в некоторой степени связан с тем, что описывает, при каких стандартных условиях отображается приглашение. Мне интересно знать, как заставить это все же.


1
«Это может быть неприятно, если вы хотите проверить, существуют ли зависимости и какие будут установлены». Я смущен этим. Если никакие зависимости не устанавливаются, что вы проверяете?
Фахим Митха,

2
Интересный вопрос. Кажется, нет никакого способа сделать это, за исключением исправления apt-getс подходящей опцией. Впрочем, этот гипотетический вариант, откровенно говоря, не кажется мне очень полезным.
Фахим Митха

@FaheemMitha Моя цель для этого состоит в том, чтобы намного легче было узнать, какие новые зависимости можно / будут устанавливать, используя, apt-get installа не apt-cache showpkg.
user369450

Ответы:


10

С текущей реализацией apt-get сделать это просто невозможно, вам нужно будет открыть запрос функции и обратиться к сопровождающему. Текущее поведение apt-get состоит в том, что когда список пакетов, которые вы неявно объявили установленными, равен количеству пакетов, которые будут установлены, и никакие другие пакеты не затрагиваются обновлениями или сбоями, apt-get предполагает, что пользователь уже уверен в том , что будет сделано , если вы не уверены , или хотите , чтобы проанализировать , что будет сделано без установки пакета, вы можете использовать Костаса рекомендацию о -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.