Editar: Tenga en cuenta que, como se escribe a continuación, conozco respuestas en este sitio que explican que apt-get
se utilizan expresiones regulares para interpretar los nombres de los paquetes. De hecho, la pregunta es directamente sobre en qué se diferencia su comportamiento real del documentado. Lea la pregunta antes de sugerir un duplicado.
Algunas respuestas en este sitio advierten sobre el uso apt-get
de comodines (es decir, asteriscos *
:), porque apt-get
supuestamente los expande como expresiones regulares, lo que puede dar resultados inesperados (y no deseados), especialmente con apt-get remove
. En efecto,página de ubuntu man
paraapt-get
lee:
Si ningún paquete coincide con la expresión dada y la expresión contiene uno de '.', '?' o '*' entonces se supone que es una expresión regular POSIX y se aplica a todos los nombres de paquetes en la base de datos. Luego se instalan (o eliminan) todas las coincidencias. Tenga en cuenta que la coincidencia se realiza mediante subcadena, por lo que 'lo.*' coincide con 'how-lo' y 'lowest'. Si no lo desea, ancle la expresión regular con un carácter '^' o '$', o cree una expresión regular más específica.
De hecho,esta respuestareclamos:
apt-get acepta una expresión regular y no un patrón global como shell.
Creo que esto está mal (al menos en Xenial). Por ejemplo, puedo reproducir el siguiente comportamiento:
$ sudo apt-get install -s 'meld*'
[...]
Note, selecting 'meld' for glob 'meld*'
[...]
$ sudo apt-get install -s 'meldt*'
[...]
Note, selecting 'python-meld3' for regex 'meldt*'
Note, selecting 'python3-meld3' for regex 'meldt*'
Note, selecting 'meld' for regex 'meldt*'
[...]
(No eliminé ninguna coincidencia, solo partes irrelevantes de apt-get
la respuesta de).
Me parece que, en base a este comportamiento, apt-get
primero se intenta hacer coincidir expresiones dadas como globos, y solo si falla, se vuelve a intentar como expresiones regulares.
¿Tengo ese derecho? ¿He entendido mal la man
página o este comportamiento está mal documentado?
Respuesta1
Esto se explica en elapt(8)
página de manual:
install, remove, purge (apt-get(8))
Performs the requested action on one or more packages specified via
regex(7), glob(7) or exact match. The requested action can be
overridden for specific packages by append a plus (+) to the
package name to install this package or a minus (-) to remove it.
Este párrafo no existe en el15.10 página de manual, por lo que podría haberse agregado en 16.04.
Esto no parece haber sido mencionado en el registro de cambios de apt.el compromiso que agregó esto en 2013no muestra ningún cambio en las páginas de manual. Esto se deshabilitó brevemente y se volvió a habilitar más adelante (verse compromete entre mayo y febrero de 2014), yla desactivación se menciona en el registro de cambios.
Es posible que esto se haya añadido hace cuatro años, perosolo documentado en 2015. Y apt-get
la página de manual de sigue descuidada.