我正在使用 Chef 编写服务器自动化脚本,并且需要检查 PEAR 包管理器的安装版本。命令行开关-V
将详细的版本信息打印到控制台:
PEAR Version: 1.9.0
PHP Version: 5.3.5-1ubuntu7.2ppa1~lucid
Zend Engine Version: 2.3.0
Running on: Linux ubuntu-lucid-32-generic 2.6.32-33-generic #72-Ubuntu SMP Fri Jul 29 21:08:37 UTC 2011 i686
Run Code Online (Sandbox Code Playgroud)
但是,我无法分离1.9.0
该结果的一部分并对其进行测试。pear 脚本似乎没有打印到 STDOUT,因为重定向也不起作用:
$ pear -V > pear_version
PEAR Version 1.9.0
...
$ cat pear_version
$
Run Code Online (Sandbox Code Playgroud)
如何捕获输出并将其传递给 grep 以便我可以仅返回“1.9.0”?
(假设你的 shell 是 bash 等 linux/unix 变体)
我没有 pear 来测试,但我猜想缺少的版本信息将进入 STDERR,所以尝试
pearVer=$(pear -V 2>&1 | sed '/^PEAR Version: /s///')
Run Code Online (Sandbox Code Playgroud)
这只匹配以“PEAR Version”开头的行。's///' 是“匹配第一个表达式并将其替换为 '//'(无)的简写。
我希望这有帮助。