'apt-get' e curingas: globs vs. regex

5

Editar : Por favor note, como escrito abaixo, estou ciente das respostas neste site explicando que apt-get usa regex para interpretar os nomes dos pacotes. De fato, a questão é diretamente sobre uma maneira em que seu comportamento real é diferente daquele documentado. Por favor, leia a questão antes de sugerir uma cópia.

Algumas respostas neste site avisam sobre o uso de apt-get com curingas (isto é, asteriscos: * ), porque apt-get supostamente os expande como expressões regulares, o que pode dar resultados inesperados (e indesejados), especialmente com% código%. Na verdade, o Ubuntu apt-get remove page para man diz:

  

Se nenhum pacote corresponder à expressão especificada e a expressão contiver   um de '.', '?' ou '*' então é assumido como sendo um POSIX regular   expressão, e é aplicado a todos os nomes de pacotes no banco de dados.   Qualquer correspondência é então instalada (ou removida). Note que a correspondência é   feito por substring, então 'lo. *' combina 'how-lo' e 'lowest'. Se isso é   não desejado, ancorar a expressão regular com um caractere '^' ou '$',   ou crie uma expressão regular mais específica.

Na verdade, esta resposta afirma:

  

O apt-get aceita uma expressão regular e não um padrão glob como o shell.

Eu acredito que isso está errado (pelo menos a partir de Xenial). Por exemplo, posso reproduzir o seguinte comportamento:

$ 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*'
[...]

(não removi nenhuma correspondência, apenas partes irrelevantes da resposta de apt-get ).

Parece-me, com base nesse comportamento, que apt-get primeiro tenta corresponder expressões dadas como globs e, somente se falhar, tentará novamente como expressões regulares.

Eu tenho isso certo? Eu entendi mal a página apt-get ou esse comportamento está mal documentado?

    
por Jonathan Y. 14.06.2017 / 17:32

1 resposta

1

Isso é explicado na apt(8) manpage :

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 parágrafo não existe na página de manual 15.10 , por isso pode foram adicionados em 16.04.

Isso não parece ter sido mencionado no changelog do apt - commit que foi adicionado em 2013 não mostra alterações nas páginas de manual. Isso foi desativado brevemente e reativado mais tarde (consulte compromissos entre maio e fevereiro de 2014 ), e a desativação é mencionada no changelog .

Portanto, isso pode ter sido adicionado há quatro anos, mas documentado apenas em 2015 . E a manpage de apt-get permanece negligenciada.

    
por muru 15.06.2017 / 09:41