Forzare apt-get per richiedere si / no


11

Esiste un modo per forzare la apt-getvisualizzazione del prompt sì / no? --force-yesUn'opzione esiste, ma sembra che ci sia alcuna --force-promptpossibilità o simili. Se si tenta di installare un pacchetto con tutte le dipendenze già installate, inizierà l'installazione senza visualizzare un prompt sì / no. Questo può essere fastidioso se si desidera verificare se esistono dipendenze e quali verranno installate perché non si sa se le dipendenze potenziali sono state installate in anticipo.

NOTA: quando “apt-get install” mi chiede di confermare se voglio continuare o no? è in qualche modo correlato in quanto descrive in quali condizioni standard viene visualizzato il prompt. Sono interessato a sapere come forzarlo però.


1
"Questo può essere fastidioso se si desidera verificare se esistono dipendenze e quali verranno installate." Sono confuso da questo. Se non vengono installate dipendenze, cosa stai recensendo?
Faheem Mitha,

2
Domanda interessante. Sembra che non ci sia modo di farlo, a parte il patching apt-getcon un'opzione adatta. Tuttavia, questa ipotetica opzione non mi sembra molto utile, francamente.
Faheem Mitha,

@FaheemMitha Il mio scopo è fare in modo che sia molto più facile scoprire quali nuove dipendenze potrebbero / saranno installate usando apt-get installanziché apt-cache showpkg.
user369450,

Risposte:


10

Non c'è modo di farlo con l'attuale implementazione di apt-get, è necessario aprire una richiesta di funzionalità e fare appello al manutentore. Il comportamento attuale di apt-get è che quando l'elenco dei pacchetti che hai dichiarato implicitamente di essere installato è uguale alla quantità di pacchetti che verranno installati e che nessun altro pacchetto è interessato da aggiornamenti o interruzioni, apt-get presuppone già l'utente è sicuro di ciò che verrà fatto , se non si è sicuri o si desidera analizzare ciò che verrà fatto senza installare effettivamente il pacchetto, è possibile utilizzare la raccomandazione Costas di -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Esistono altri strumenti come apt-listbugs che analizzano le versioni dei pacchetti da installare prima di installarli effettivamente (in questo caso per i bug) e avvisarti.


4

Il comando assume yessolo in caso di installazione di un pacchetto (che è stato avviato dalla riga di comando) E tutte le dipendenze nel sistema già non sono nulla da installare tranne un pacchetto richiesto.

In altre parole "se non c'è niente da vedere (nessun pacchetto aggiuntivo) allora nessun prompt (niente da chiedere)".

A scopo di test è possibile utilizzare una chiave -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz se all dependecies are installedgià non ti è stato promesso quindi non saranno installati altri pacchetti.
Costas,

0

Vecchia domanda, posso vedere, ma in una situazione simile ora. Di solito uso sudo aptitude install -P PACKAGE_NAMEquello che chiedo sempre prima dell'installazione. Comunque ora in Debian il gestore pacchetti predefinito è apt|apt-gete non ha questa funzionalità. Ovviamente posso ancora installarlo aptitudee usarlo ... Comunque ho scritto una piccola funzione / script per il wrapper sh / bash apt-getda chiedere prima dell'installazione. È davvero grezzo e l'ho scritto come una funzione nel mio terminale.

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

Ora, chiariamo:

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
}

Per utilizzare questa funzione come uno script sh / bash è sufficiente creare un file di script, ad es. my_apt-get.shCon contenuto (Nota: l'elenco non contiene commenti, per renderlo un po 'più breve ;-)):

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

Quindi mettilo per esempio in ~/bin/e rendilo eseguibile con $ chmod u+x ~/bin/my_apt-get.sh. Se la directory ~/binè inclusa nella tua PATHvariabile, sarai in grado di eseguirla semplicemente:

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

Notare che:

  • Il codice usa sudo. Se si utilizza l' rootaccount, probabilmente è necessario modificarlo.
  • Il codice non supporta il completamento automatico della shell
  • Non ho idea di come funzioni il codice con i modelli di shell (ad es. "!", "*", "?", ...)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.