Я запускаю 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
Мои вопросы:
Мне не нужен Google API для PHP, поэтому я пытаюсь использовать регулярное выражение, но, как показано выше, он просто не принимает \d
.
Можно ли как-то использовать --name-only с apt-get install
не apt-cache search
.
Спасибо!
apt-get install
не apt-cache search
.По умолчанию apt-cache search
ищет информацию из доступных имен пакетов и их длинного описания. --names-only
ограничивает этот поиск только именами пакетов.
Сейчас apt-get
не заботится об описании. Он будет пытаться дословно указать имя пакета и, если не будет найдено, будет рассматривать параметр как регулярное выражение (хотя на самом деле это не документировано, но фактически является расширенным регулярным выражением). Это регулярное выражение будет использоваться только для сопоставления имен пакетов из списка известных пакетов. Так что нет --names-only
доступный вариант: рассмотреть apt-get
находится под постоянным действием этой опции.
\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
), поэтому он выбран в качестве кандидата, поскольку соответствует регулярному выражению. Конечно, его нельзя установить, поэтому он не будет указан в конце.