将命令的管道结果作为参数



我想得到rpm -qa | grep something的结果,然后运行我得到的rpm -ql result-i-got的结果,所有这些都在一行中。

我发现这个工作:

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

我想知道,有没有更好甚至不同的方法来传递这个结果,以获得与我上面写的相同的结果?谢谢

xargs就是为这个而设计的:

rpm -qa | grep something | xargs rpm -ql

您实际上可以为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

最新更新