Назад | Перейти на главную страницу

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не apt-cache search.

Спасибо!

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

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

Сейчас apt-get не заботится об описании. Он будет пытаться дословно указать имя пакета и, если не будет найдено, будет рассматривать параметр как регулярное выражение (хотя на самом деле это не документировано, но фактически является расширенным регулярным выражением). Это регулярное выражение будет использоваться только для сопоставления имен пакетов из списка известных пакетов. Так что нет --names-only доступный вариант: рассмотреть 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), поэтому он выбран в качестве кандидата, поскольку соответствует регулярному выражению. Конечно, его нельзя установить, поэтому он не будет указан в конце.