Force o apt-get a solicitar sim / não


11

Existe uma maneira de forçar apt-geta exibição de prompt sim / não? Existe uma --force-yesopção, mas parece não haver --force-promptopção ou similar. Se você tentar instalar um pacote que possui todas as dependências já instaladas, ele começará a instalação sem exibir um prompt sim / não. Isso pode ser incômodo se você desejar revisar se existem dependências e quais serão instaladas porque você não sabe se as dependências em potencial são instaladas com antecedência.

NOTA: Quando o “apt-get install” pede para eu confirmar se quero continuar ou não? está um pouco relacionado, pois descreve sob quais condições padrão o prompt é exibido. Estou interessado em saber como forçá-lo embora.


1
"Isso pode ser incômodo se você quiser revisar se existem dependências e quais serão instaladas." Estou confuso com isso. Se nenhuma dependência estiver sendo instalada, o que você está revisando?
Faheem Mitha 27/10

2
Pergunta interessante. Parece não haver maneira de fazer isso, com falta de correção apt-getcom uma opção adequada. No entanto, essa opção hipotética não me parece muito útil, francamente.
Faheem Mitha 27/10

@FaheemMitha Meu objetivo é fazer com que seja muito mais fácil descobrir quais novas dependências poderiam / serão instaladas usando apt-get installe não apt-cache showpkg.
user369450

Respostas:


10

Não há como fazer isso com a implementação atual do apt-get; você precisará abrir uma solicitação de recurso e apelar para o mantenedor. O comportamento atual do apt-get é que, quando a lista de pacotes implicitamente declarados para instalação é igual à quantidade de pacotes que serão instalados e nenhum outro pacote é afetado por atualizações ou quebras, o apt-get já presume que o usuário tem certeza do que será feito ; se você não tiver certeza ou quiser analisar o que será feito sem realmente instalar o pacote, use a recomendação Costas de -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Existem outras ferramentas, como o apt-listbugs, que analisam as versões dos pacotes a serem instalados antes de você realmente instalá-los (neste caso, por erros) e avisam você.


4

O comando assume yesapenas no caso de instalar um pacote (iniciado na linha de comando) E todas as dependências do sistema já, isto é, nada a instalar, exceto um pacote solicitado.

Em outras palavras, "se não há nada a ver (sem pacotes extras), não há prompt (não há nada a pedir)".

Para fins de teste, você pode usar uma chave -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz se all dependecies are installedvocê já não for avisado, então outros pacotes não serão instalados.
Costas

0

Pergunta antiga, eu posso ver, mas em situação semelhante agora. Normalmente eu uso sudo aptitude install -P PACKAGE_NAME, o que sempre pergunto antes de instalar. No entanto, agora o gerenciador de pacotes padrão do Debian é apt|apt-gete não possui essa funcionalidade. É claro que ainda posso instalá aptitude-lo e usá-lo ... No entanto, escrevi uma pequena função / script sh / bash wrapper apt-getpara perguntar antes da instalação. É realmente cru e eu escrevi como uma função no meu terminal.

$ 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; }

Agora, vamos deixar mais claro:

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
}

Para usar esta função como um script sh / bash, basta criar um arquivo de script, por exemplo, my_apt-get.shcom conteúdo (Nota: a listagem não contém comentários, para torná-lo um pouco mais curto ;-)):

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

Em seguida, coloque-o para, por exemplo, in ~/bin/e torne-o executável com $ chmod u+x ~/bin/my_apt-get.sh. Se o diretório ~/binestiver incluído na sua PATHvariável, você poderá executá-lo simplesmente:

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

Observe:

  • O código usa sudo. Se você usa uma rootconta, provavelmente precisará ajustá-la.
  • O código não suporta o preenchimento automático de shell
  • Não tem idéia de como o código funciona com padrões de shell (por exemplo, "!", "*", "?", ...)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.