apt da la advertencia de "Interfaz CLI inestable"

63

Estoy escribiendo un script que necesita leer un archivo que contiene información de un paquete para el que escribí esta línea

apt show $PACKAGE_NAME > pack_info.txt

Sin embargo, esto no crea el pack_info.txtarchivo y siempre da esta Advertencia:

ADVERTENCIA: apt no tiene una interfaz CLI estable. Usar con precaución en los guiones.

Por el momento intenté redirigir ambos STDOUTy STDERRusar &>y funcionó para dar un archivo pack_info.txtque necesitamos.

También intenté obtener contenidos dpkgy eso también funcionó:

dpkg -s $PACKAGE_NAME > pack_info.txt

Lo bueno es que no muestra una advertencia ni un error.

Lo malo es que no queremos usar dpkg y solo queremos STDOUT de apt para redirigir al archivo.

Entonces, tengo tres preguntas que hacer:

  1. ¿Qué queremos decir exactamente con interfaz estable de CLI?
  2. ¿Cómo utilizar de forma segura y sin errores tales comandos en los scripts? [por favor cuídate de explicar con el ejemplo]
  3. ¿Hay alguna manera de solo y solo redirigir STDOUT de apt showa un archivo?
C0deDaedalus
fuente

Respuestas:

80

aptes para el terminal y da salida mientras bella apt-gety apt-cacheson para los scripts y dar, una salida analizable estable. El guión equivalente de su apt showcomando, por lo tanto, es:

apt-cache show $PACKAGE_NAME >pack_info.txt

Ahora para responder a sus preguntas una por una:

¿Qué queremos decir exactamente con interfaz estable de CLI?

aptLa salida de no es bien utilizable en scripts. Por ejemplo, apt install(en comparación con apt-get install) muestra una barra de progreso que es inútil para los scripts y puede arrojar errores cuando se analiza el resultado. apt show firefoxmuestra una pista para un registro adicional, que también es totalmente inútil en un script, desea que simplemente muestre todos los registros allí, eso es lo que apt-cache show firefoxhace. Veamos qué man apttiene que decir al respecto:

La línea de comando apt (8) está diseñada como una herramienta para el usuario final y puede cambiar el comportamiento entre versiones. Si bien intenta no romper la compatibilidad con versiones anteriores, esto tampoco está garantizado si un cambio parece beneficioso para el uso interactivo.

Todas las características de apt (8) también están disponibles en herramientas APT dedicadas como apt-get (8) y apt-cache (8). apt (8) solo cambia el valor predeterminado de algunas opciones (consulte apt.conf (5) y específicamente el ámbito binario). Por lo tanto, debe preferir usar estos comandos (potencialmente con algunas opciones adicionales habilitadas) en sus scripts, ya que mantienen la compatibilidad con versiones anteriores tanto como sea posible.


¿Cómo utilizar de forma segura y sin errores tales comandos en los scripts?

Simplemente use apt-geto apt-cacherespectivamente en lugar de simple apt. :) Vea esta respuesta para obtener una lista de equivalentes.


¿Hay alguna manera de solo y solo redirigir STDOUT de apt show a un archivo?

Ya lo hizo correctamente: >fileo 1>fileredirige stdout, 2>fileredirige stderr y &>fileredirige a ambos file.

postre
fuente