apt wyświetla ostrzeżenie „Niestabilny interfejs CLI”

63

Piszę skrypt, który musi odczytać plik zawierający informacje o pakiecie, dla którego napisałem ten wiersz

apt show $PACKAGE_NAME > pack_info.txt

Jednak to nie tworzy pack_info.txtpliku i zawsze wyświetla to Ostrzeżenie:

OSTRZEŻENIE: apt nie ma stabilnego interfejsu CLI. Używaj ostrożnie w skryptach.

Na razie próbowałem przekierować oba pliki STDOUTi STDERRużywać &>i udało się uzyskać plik pack_info.txt, którego potrzebujemy.

Próbowałem też pobrać zawartość dpkgi to również działało:

dpkg -s $PACKAGE_NAME > pack_info.txt

Co dobrego, że nie pokazuje ani ostrzeżenia, ani błędu.

Co jest niedobre, że nie chcemy używać dpkg i chcemy tylko STDOUT apt do przekierowania do pliku.

Mam więc trzy pytania:

  1. Co dokładnie rozumiemy przez stabilny interfejs CLI?
  2. Jak bezpiecznie i bezbłędnie używać takich poleceń w skryptach? [proszę wyjaśnić na przykładzie]
  3. Czy istnieje sposób tylko i wyłącznie przekierowywania STDOUT apt showdo pliku?
C0deDaedalus
źródło

Odpowiedzi:

80

aptjest dla terminala i daje piękne wyjście, apt-geta apt-cachedla skryptów i daje stabilne, analizowalne wyjście. Odpowiednikiem skryptu twojego apt showpolecenia jest zatem:

apt-cache show $PACKAGE_NAME >pack_info.txt

Teraz, aby odpowiadać na pytania jeden po drugim:

Co dokładnie rozumiemy przez stabilny interfejs CLI?

aptDane wyjściowe nie są dobrze przydatne w skryptach. Na przykład apt install(w porównaniu do apt-get install) wyświetla pasek postępu, który jest bezużyteczny dla skryptów i może zgłaszać błędy podczas analizowania danych wyjściowych. apt show firefoxpokazuje podpowiedź do dodatkowego rekordu, który jest również całkowicie bezużyteczny w skrypcie, chcesz, aby po prostu wypisał każdy rekord - właśnie to apt-cache show firefoxrobi. Zobaczmy, co man aptma do powiedzenia na ten temat:

Komenda apt (8) została zaprojektowana jako narzędzie użytkownika końcowego i może zmieniać zachowanie między wersjami. Chociaż stara się nie zerwać z kompatybilnością wsteczną, nie jest to również gwarantowane, jeśli zmiana wydaje się korzystna do użytku interaktywnego.

Wszystkie funkcje apt (8) są również dostępne w dedykowanych narzędziach APT, takich jak apt-get (8) i apt-cache (8). apt (8) po prostu zmienia domyślną wartość niektórych opcji (patrz apt.conf (5), a konkretnie zakres binarny). Dlatego powinieneś preferować używanie tych poleceń (potencjalnie z włączonymi dodatkowymi opcjami) w swoich skryptach, ponieważ zachowują one możliwie jak największą zgodność z poprzednimi wersjami.


Jak bezpiecznie i bezbłędnie używać takich poleceń w skryptach?

Po prostu użyj apt-getlub apt-cachezamiast zwykłego apt. :) Zobacz tę odpowiedź, aby uzyskać listę ekwiwalentów.


Czy istnieje sposób tylko i wyłącznie przekierowania STDOUT apt show do pliku?

Zrobiłeś to już poprawnie: >filelub 1>fileprzekierowuje stdout, 2>fileprzekierowuje stderr i &>fileprzekierowuje oba na file.

deser
źródło