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

我想要得到rpm -qa | grep something的结果 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 | grep something ,你可以使用

 rpm -qa '*something*' 

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

例:

 $ 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