Apt

apt-get 安裝與萬用字元匹配的軟體包

  • August 14, 2018

我正在執行 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

我的問題是:

  1. 我不想要 PHP 的 Google API,所以我嘗試使用正則表達式,但如上所示,它不接受\d.
  2. 是否可以以某種方式使用 –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及其依賴項。

請注意使用^and$來分隔所選包名的開始和結束:一旦表達式用作正則表達式,它可以是包名的任何部分,所以最好小心。例如,嘗試apt-get install .將嘗試安裝具有至少一個字元的任何包:所有這些包,當然會因衝突而失敗。

對於小細節:php4-cliJessie 中不存在,但被另一個包 ( php-xajax) 引用,這就是為什麼它被選為候選者,因為它與正則表達式匹配。當然它是不可安裝的,所以不會在最後列出。

引用自:https://serverfault.com/questions/926103