我正在运行 Debian 8 Jessie,尝试从 shell 脚本安装 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
我的问题是:
我不想要 PHP 的 Google API,因此我尝试使用正则表达式,但如上所示,它就是不接受
\d
。是否可以以某种方式将 --name-only 与 一起使用
apt-get install
,而不是apt-cache search
。
谢谢!
答案1
是否可以以某种方式将 --name-only 与 一起使用apt-get install
,而不是apt-cache search
。
默认情况下,apt-cache search
从可用的包名称及其详细描述中搜索信息。--names-only
将此搜索仅限制在包名称内。
现在apt-get
不关心描述。它将逐字尝试包名称,如果未找到,则将参数视为正则表达式(虽然没有真正记录,但实际上是扩展的正则表达式)。此正则表达式将仅用于匹配已知包列表中的包名称。因此没有--names-only
可用的选项:考虑apt-get
受此选项的永久影响。
我不想要 PHP 的 Google API,因此我尝试使用正则表达式,但如上所示,它就是不接受\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
) 这就是为什么它被选为候选,因为它与正则表达式匹配。当然,它不可安装,所以最后不会列出。