将命令的输出作为参数传递

5
我想获得rpm -qa | grep something的结果,然后在同一行中运行我得到的结果rpm -ql result-i-got
我已经发现如下命令可以实现此功能:
rpm -ql $(rpm -qa | grep something)

我想知道,是否有更好或不同的方法来将此结果传送以获得与上述所写相同的结果? 谢谢。

1
在我看来,这看起来非常优雅。 - Stefan Hegny
2个回答

7
就是为此而生的:

rpm -qa | grep something | xargs rpm -ql

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

1
那确实是另一种方法,我采用了你建议的别名,但我问题的主要焦点是管道 :) 谢谢! - Moshe

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