apt-get instala pacotes combinando curingas

1

Estou usando o Debian 8 Jessie, tentando instalar o intérprete de linha de comando PHP a partir de um script de shell.

Aqui está o que eu faço:

sudo apt-get install php-cli

diz-me que não há php-cli . Eu acho que há php5-cli . No entanto, para tornar meu script mais robusto, por exemplo quando rodando em um servidor ubuntu recente oferecendo php7 , eu não quero especificar php5-cli .

Eu pesquisei por uma resposta, mas o que só me confundiu:

xrfang@P-qapub:~$ sudo apt-get install --names-only "php*-cli"
E: Command line option --names-only is not understood
xrfang@P-qapub:~$ sudo apt-cache search --names-only php-cli
php-google-api-php-client - Google APIs client library for PHP
xrfang@P-qapub:~$ apt-cache search --names-only "php\d+-cli$"
xrfang@P-qapub:~$ apt-cache search --names-only "php\d-cli$"
xrfang@P-qapub:~$ apt-cache search --names-only "php\d-cli$"
xrfang@P-qapub:~$ apt-cache search --names-only "php5-cli$"
php5-cli - command-line interpreter for the php5 scripting language

Minhas perguntas são:

  1. Eu não quero a API do Google para PHP, então eu tento usar o regex, mas como mostrado acima, ele não aceita \d .

  2. É possível usar --name-only de alguma forma com apt-get install , não apt-cache search .

Obrigado!

    
por xrfang 13.08.2018 / 08:54

1 resposta

1

É possível usar --name-only de alguma forma com apt-get install , não apt-cache search .

Por padrão apt-cache search pesquisa informações dos nomes de pacotes disponíveis e sua longa descrição. --names-only restringe essa pesquisa apenas aos nomes dos pacotes.

Agora, apt-get não se importa com a descrição. Ele tentará um nome de pacote textualmente e, se não for encontrado, considerará o parâmetro como um regex (embora não seja realmente documentado, na verdade, uma expressão regular estendida). Esse regex será usado apenas para corresponder ao (s) nome (s) do pacote da lista de pacotes conhecidos. Portanto, não há nenhuma opção --names-only disponível: considere apt-get está sob efeito permanente dessa opção.

Eu não quero a API do Google para PHP, então eu tento usar o regex, mas como mostrado acima, ele simplesmente não aceita \d .

apt-get aceita expressões regulares (estendidas) , não Expressão Regular Compatível com Perl . \d significa um dígito apenas em um PCRE e não possui um significado especial em BRE ou ERE. Um dígito em uma expressão regular pode ser representado por [0-9] (ou por diversão [[:digit:]] como uma sintaxe de expressão regular estendida).

Sua pesquisa seria:

$ apt-cache search --names-only 'php[0-9]+-cli'
php5-cli - command-line interpreter for the php5 scripting language

Para instalar qualquer versão numerada do php cli, seria:

# apt-get install '^php[0-9]+-cli$'
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'php4-cli' for regex '^php[0-9]+-cli$'
Note, selecting 'php5-cli' for regex '^php[0-9]+-cli$'
The following extra packages will be installed:

[...]

Isso instalará php5-cli e suas dependências.

Observe o uso de ^ e $ para delimitar o início e o fim do nome do pacote selecionado: uma vez que a expressão é usada como regex, pode ser qualquer parte do nome de um pacote, portanto, tenha cuidado. Por exemplo, tentar apt-get install . tentará instalar qualquer pacote com pelo menos um caractere: todos eles, e obviamente falhará por conflitos.

Para os pequenos detalhes: php4-cli não existe em Jessie, mas é referenciado por outro pacote ( php-xajax ) é por isso que é selecionada como candidata desde que correspondeu à regex. Claro que não é instalável, portanto, não será listado no final.

    
por 14.08.2018 / 02:38

Tags