Erzwinge apt-get, um Ja / Nein aufzufordern


11

Gibt es eine Möglichkeit, apt-getdie Anzeige der Ja / Nein-Eingabeaufforderung zu erzwingen ? Es --force-yesgibt eine Option, aber es scheint keine --force-promptoder eine ähnliche Option zu geben. Wenn Sie versuchen, ein Paket zu installieren, auf dem bereits alle Abhängigkeiten installiert sind, wird die Installation gestartet, ohne dass eine Ja / Nein-Eingabeaufforderung angezeigt wird. Dies kann störend sein, wenn Sie überprüfen möchten, ob Abhängigkeiten vorhanden sind und welche installiert werden, da Sie nicht wissen, ob die potenziellen Abhängigkeiten im Voraus installiert werden.

HINWEIS: Wann fordert mich "apt-get install" auf, zu bestätigen, ob ich fortfahren möchte oder nicht? ist insofern etwas verwandt, als es beschreibt, unter welchen Standardbedingungen die Eingabeaufforderung angezeigt wird. Ich bin interessiert zu wissen, wie man es erzwingt.


1
"Dies kann lästig sein, wenn Sie überprüfen möchten, ob Abhängigkeiten vorhanden sind und welche installiert werden." Das verwirrt mich. Was überprüfen Sie, wenn keine Abhängigkeiten installiert werden?
Faheem Mitha

2
Interessante Frage. Es scheint keine Möglichkeit zu geben, dies zu tun, außer apt-getmit einer geeigneten Option zu patchen . Diese hypothetische Option erscheint mir jedoch ehrlich gesagt nicht sehr nützlich.
Faheem Mitha

@FaheemMitha Mein Zweck dabei ist, dass es viel einfacher ist herauszufinden, welche neuen Abhängigkeiten verwendet werden könnten / werden, apt-get installanstatt apt-cache showpkg.
user369450

Antworten:


10

Mit der aktuellen Implementierung von apt-get ist dies einfach nicht möglich. Sie müssten eine Funktionsanforderung öffnen und sich an den Betreuer wenden. Das aktuelle Verhalten von apt-get ist, dass apt-get den Benutzer bereits davon ausgeht, dass die Liste der Pakete, die Sie implizit als installiert deklariert haben, der Anzahl der zu installierenden Pakete entspricht und keine anderen Pakete von Upgrades oder Unterbrechungen betroffen sind ist sicher, was getan werden soll , wenn Sie sich nicht sicher sind , oder analysieren wollen , was ohne tatsächlich zu installieren , das Paket getan werden, können Sie Costas Empfehlung von -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Es gibt andere Tools wie apt-listbugs, die die Versionen der zu installierenden Pakete analysieren, bevor Sie sie tatsächlich installieren (in diesem Fall auf Fehler) und Sie warnen.


4

Der Befehl setzt yesnur für den Fall voraus , dass ein Paket (das über die Befehlszeile initiiert wurde) UND alle Abhängigkeiten im System bereits installiert sind, dh nichts zu installieren außer einem angeforderten Paket.

Mit anderen Worten "wenn nichts zu sehen ist (keine zusätzlichen Pakete), dann keine Eingabeaufforderung (nichts zu verlangen)".

Zu Testzwecken können Sie einen Schlüssel verwenden -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz Wenn all dependecies are installedSie bereits nicht dazu aufgefordert wurden, werden keine anderen Pakete installiert.
Costas

0

Alte Frage, kann ich sehen, aber jetzt in einer ähnlichen Situation. Normalerweise benutze ich sudo aptitude install -P PACKAGE_NAME, was immer vor der Installation gefragt wird. Allerdings ist jetzt in Debian Standard-Paket-Manager apt|apt-getund es hat diese Funktionalität nicht. Natürlich kann ich es trotzdem installieren aptitudeund verwenden ... Allerdings habe ich eine kleine sh / bash-Wrapper-Funktion / ein Skript geschrieben apt-get, um vor der Installation nachzufragen. Es ist wirklich roh und ich habe es als Funktion in mein Terminal geschrieben.

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

Lassen Sie uns jetzt klarer machen:

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
}

Um diese Funktion als sh / bash-Skript zu verwenden, erstellen Sie einfach eine Skriptdatei, z. B. my_apt-get.shmit Inhalt (Hinweis: Die Auflistung enthält keine Kommentare, um sie etwas kürzer zu machen ;-)):

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

Dann setzen Sie es zB ein ~/bin/und machen es ausführbar mit $ chmod u+x ~/bin/my_apt-get.sh. Wenn das Verzeichnis ~/binin Ihrer PATHVariablen enthalten ist, können Sie es einfach ausführen, indem Sie:

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

Bitte beachten Sie:

  • Der Code verwendet sudo. Wenn Sie ein rootKonto verwenden, müssen Sie es wahrscheinlich anpassen.
  • Der Code unterstützt keine automatische Vervollständigung der Shell
  • Haben Sie keine Ahnung, wie der Code mit Shell-Mustern funktioniert (zB "!", "*", "?", ...)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.