apt gibt die Warnung „Instabile CLI-Schnittstelle“ aus

63

Ich schreibe ein Skript, das eine Datei lesen muss, die Informationen zu einem Paket enthält, für das ich diese Zeile geschrieben habe

apt show $PACKAGE_NAME > pack_info.txt

Dies erstellt jedoch nicht die pack_info.txtDatei und gibt immer diese Warnung aus:

WARNUNG: apt hat keine stabile CLI-Schnittstelle. In Skripten mit Vorsicht verwenden.

Vorläufig habe ich versucht, beide umzuleiten STDOUTund zu STDERRverwenden, &>und es hat sich herausgestellt, pack_info.txtdass wir eine Datei erhalten , die wir brauchen.

Ich habe auch versucht, Inhalte von zu bekommen, dpkgund das hat auch funktioniert:

dpkg -s $PACKAGE_NAME > pack_info.txt

Was gut ist, dass es weder eine Warnung noch einen Fehler zeigt.

Was ist schlecht, dass wir nicht dpkg verwenden wollen und nur wollen, dass STDOUT von apt in die Datei umleitet.

Ich muss also drei Fragen stellen:

  1. Was genau verstehen wir unter stabiler CLI-Schnittstelle?
  2. Wie können solche Befehle in Skripten sicher und fehlerfrei verwendet werden? [bitte am Beispiel erläutern]
  3. Gibt es eine Möglichkeit, STDOUT nur apt showin eine Datei umzuleiten ?
C0deDaedalus
quelle

Antworten:

80

aptist für das Terminal und gibt eine schöne Ausgabe, während apt-getund apt-cachefür Skripte und geben eine stabile, analysierbare Ausgabe. Das Skriptäquivalent Ihres apt showBefehls lautet daher:

apt-cache show $PACKAGE_NAME >pack_info.txt

Beantworten Sie nun Ihre Fragen nacheinander:

Was genau verstehen wir unter stabiler CLI-Schnittstelle?

aptDie Ausgabe von ist in Skripten nicht gut verwendbar. Beispiel: apt install(Im Vergleich zu apt-get install) zeigt eine Fortschrittsleiste an, die für Skripte unbrauchbar ist und bei der Analyse der Ausgabe Fehler auslösen kann. apt show firefoxzeigt einen Hinweis für einen zusätzlichen Datensatz, der auch in einem Skript völlig nutzlos ist. Sie möchten, dass er einfach jeden Datensatz dort ausgibt - genau das apt-cache show firefoxtut es. Mal sehen, was man aptdazu zu sagen hat:

Die apt (8) -Befehlszeile ist als Endbenutzertool konzipiert und kann das Verhalten zwischen den Versionen ändern. Obwohl versucht wird, die Abwärtskompatibilität nicht zu unterbrechen, kann dies auch nicht garantiert werden, wenn eine Änderung für die interaktive Verwendung vorteilhaft erscheint.

Alle Funktionen von apt (8) sind auch in dedizierten APT-Tools wie apt-get (8) und apt-cache (8) verfügbar . apt (8) ändert lediglich den Standardwert einiger Optionen (siehe apt.conf (5) und insbesondere den Binärbereich ). Daher sollten Sie diese Befehle (möglicherweise mit einigen aktivierten zusätzlichen Optionen) in Ihren Skripten bevorzugen, da sie die Abwärtskompatibilität so weit wie möglich gewährleisten.


Wie können solche Befehle in Skripten sicher und fehlerfrei verwendet werden?

Verwenden Sie einfach apt-getbzw. apt-cacheanstelle von plain apt. :) In dieser Antwort finden Sie eine Liste der Entsprechungen.


Gibt es eine Möglichkeit, STDOUT von apt show nur in eine Datei umzuleiten?

Sie haben das bereits richtig gemacht: >fileoder 1>fileleiten stdout, 2>filestderr und &>filebeide nach um file.

Dessert
quelle