apt-get install пакеты, соответствующие подстановочным знакам

Я запускаю Debian 8 Jessie, пытаюсь установить интерпретатор командной строки PHP из сценария оболочки.

Вот что я делаю:

sudo apt-get install php-cli

он сообщает мне, что нет php-cli . Я обнаружил, что есть php5-cli . Однако, чтобы сделать мой сценарий более надежным, например, при запуске на недавнем сервере ubuntu, предлагающем php7 , я не хочу указывать php5-cli .

] Я искал ответ в Google, но только смутил меня:

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

Мои вопросы:

  1. Мне не нужен Google API для PHP, поэтому я пытаюсь использовать регулярное выражение, но, как показано выше, он просто не принимает \ d .

  2. Можно ли каким-то образом использовать --name-only с apt-get install , а не поиском в кэше .

Спасибо!

1
задан 13 August 2018 в 10:31
1 ответ

Можно ли каким-то образом использовать --name-only с apt-get install , а не apt-cache search .

По умолчанию apt-cache search выполняет поиск информации из доступных имен пакетов и их длинного описания. - только имена ограничивает этот поиск только именами пакетов.

Теперь apt-get не заботится об описании. Он попытается дословно указать имя пакета и, если не будет найдено, будет рассматривать параметр как регулярное выражение (хотя на самом деле это не документировано, но фактически является расширенным регулярным выражением). Это регулярное выражение будет использоваться только для сопоставления имен пакетов из списка известных пакетов. Таким образом, нет доступной опции - только имена : учтите, что apt-get находится под постоянным действием этой опции.

Мне не нужен Google API для PHP, поэтому я попробуйте использовать регулярное выражение, но, как показано выше, оно просто не принимает \ d .

apt-get принимает (расширенные) регулярные выражения , а не Perl Совместимое регулярное выражение . \ d означает цифру только в PCRE и не имеет специального значения в BRE или ERE.Цифра в регулярном выражении может быть представлена ​​как [0-9] (или для развлечения [[: digit:]] как расширенный синтаксис регулярного выражения).

Ваш поиск будет выглядеть так:

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

Для установки любой пронумерованной версии php cli это будет:

# 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:

[...]

Это установит php5-cli и его зависимости.

Обратите внимание на использование ^ и $ для разделения начала и конца выбранного имени пакета: если выражение используется в качестве регулярного выражения, оно может быть любой частью имени пакета, поэтому будьте осторожны. Например, попытка apt-get install. попытается установить любой пакет, имеющий хотя бы один символ: все они, и, конечно, не удастся из-за конфликтов.

Для мелких деталей: php4- cli не существует в Jessie, но на него ссылается другой пакет ( php-xajax ), поэтому он выбран в качестве кандидата, поскольку соответствует регулярному выражению. Конечно, его нельзя установить, поэтому он не будет указан в конце.

1
ответ дан 3 December 2019 в 23:13

Теги

Похожие вопросы