安装PECL模块时避免提示

97

我刚刚从源代码安装了PHP在Ubuntu Natty上。

我正在尝试使用PECL安装额外的模块,比如APC和Memcache。我正在使用类似于下面的命令:

pecl install apc

然而,我会收到提示来确认一些东西。

我该如何使用pecl命令只接受默认设置?我在留言板上看到了类似这样的东西:printf "yes\n" | pecl install pecl_http。然而,对于APC而言,这将回答默认为“否”的事情(我想是这样)。


1
@Gordon:我尝试过了,但似乎没有我需要的句柄。 - ObiHill
1
如果默认值可接受,在非交互模式下,不需要PECL提示。例如,如果您在Dockefile中添加了“RUN pecl install apc”,则在构建时将自动选择默认值。 - Dereckson
4个回答

97
以下代码似乎正常工作:
printf "\n" | pecl install apc

你也可以将apc替换为任何其他PECL软件包。

干杯。


9
我也发现yes | pecl install memcache可以成功安装,虽然我想你的解决方案在默认不是“yes”的软件包中效果更好。 - Frank Farmer
1
谢谢,伙计。这甚至可以在CircleCI上运行。 - Jujhar Singh
对我来说很有效,因为我正在docker容器中安装扩展!谢谢! - Tony Langworthy

94

"yes"命令不仅可以输入"yes",还可以重复输入任何你想要的内容,包括空行,这是接受默认值的好方法。

我自己也需要这个功能,以下是对我有效的做法:

yes '' | pecl install -f apc

谢谢你的输入,汤姆。你的代码是不是想要这样写 "yes\n" | pecl install -f apc?! - ObiHill
4
Tom指的是yes命令。与printf相比,它的优点在于可以重复生成输出,这使得它更具可移植性,因为如果pecl安装程序提示额外的问题超出了你脚本中所期望的printf,则可以使用该命令。 - jmikola
@jmikola 哦,我明白了,之前不熟悉那个命令。谢谢。 - ObiHill
1
当你想要在任何选项中得到“否”而不是“是”的时候,问题就出现了。 - ln -s

16

如果您不想针对每个提示("yes", "no", 或 "")都给出相同的答案,您可以使用--configureoptions为每个选项设置特定的值(请参阅PECL手册)。

要查找可配置的选项,您需要找到软件包的package.xml文件。以memcached包为例,您可以在此处找到:

https://github.com/php-memcached-dev/php-memcached/blob/master/package.xml

搜索<configureoption>标签,在本例中它们是:

<configureoption name="with-libmemcached-dir"     prompt="libmemcached directory"     default="no"/>
<configureoption name="with-zlib-dir"             prompt="zlib directory"             default="no"/>
<configureoption name="with-system-fastlz"        prompt="use system fastlz"          default="no"/>
<configureoption name="enable-memcached-igbinary" prompt="enable igbinary serializer" default="no"/>
<configureoption name="enable-memcached-msgpack"  prompt="enable msgpack serializer"  default="no"/>
<configureoption name="enable-memcached-json"     prompt="enable json serializer"     default="no"/>
<configureoption name="enable-memcached-protocol" prompt="enable server protocol"     default="no"/>
<configureoption name="enable-memcached-sasl"     prompt="enable sasl"                default="yes"/>
<configureoption name="enable-memcached-session"  prompt="enable sessions"            default="yes"/>

您可以将这些选项传递给安装命令,如下所示:
pecl install --configureoptions 'with-libmemcached-dir="no" with-zlib-dir="no" with-system-fastlz="no" enable-memcached-igbinary="yes" enable-memcached-msgpack="no" enable-memcached-json="no" enable-memcached-protocol="no" enable-memcached-sasl="yes" enable-memcached-session="yes"' memcached

9

Obinwanne's Hill的回答完全符合我的需求,因此我这里没有新的内容,但是以下内容似乎是最短的,并且不需要任何高级工具。

echo '' | pecl install apc

6
达到同样的效果的更短替代方法是:pecl install apc <<<'' - Guss
你甚至可以更简短一些,使用 echo | pecl install apc,不需要 ''。干杯! - John Siu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接