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