apt-get 安裝與萬用字元匹配的軟體包
我正在執行 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
.謝謝!
是否可以以某種方式使用 –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-cli
Jessie 中不存在,但被另一個包 (php-xajax
) 引用,這就是為什麼它被選為候選者,因為它與正則表達式匹配。當然它是不可安裝的,所以不會在最後列出。