将命令的结果作为参数

时间:2016-05-24 09:13:34

标签: linux bash io centos pipe

我希望获得rpm -qa | grep something的结果,然后运行我得到的结果rpm -ql result-i-got,并且全部在一行中。

我发现这个有用:

rpm -ql $(rpm -qa | grep something)

我想知道,有没有更好的甚至是不同的方式来管理这个结果以获得与我上面写的相同的结果? 感谢。

2 个答案:

答案 0 :(得分:7)

xargs就是这样做的:

rpm -qa | grep something | xargs rpm -ql

答案 1 :(得分:3)

您实际上可以为rpm -qa提供通配符参数;这样就无需管道到另一个命令,因此可以使用

而不是rpm -qa | grep something
rpm -qa '*something*'

使用单引号或双引号来防止shell将星号扩展为shell globbing模式。

示例:

$ rpm -qa '*vim*'
vim-enhanced-7.0.109-7.2.el5
vim-minimal-7.0.109-7.2.el5
vim-common-7.0.109-7.2.el5

上述命令可与-l选项结合使用,以列出相关包中的文件。

rpm -qal '*vim*'

此命令的一个问题是,如果返回多个包,则不清楚哪个文件属于哪个包,因为未打印包名。要在输出中包含包名称,可以添加--queryformat选项以更好地控制信息的打印方式。例如,以下示例打印包的名称,由一行连字符 - 减号符号加下划线,后跟该包提供的文件列表:

rpm -qal --qf "\n%{NAME}\n--------\n" '*vim*'

rpm手册页提供了有关自定义命令输出的更多信息。

如果您经常发现自己使用此命令,可以将其转换为别名:

alias rpmlist='rpm -qal --qf "\n%{NAME}\n--------\n"'

并像这样使用

rpmlist '*vim*' | less