【问题标题】:Piping result of command as an argument命令的管道结果作为参数
【发布时间】:2016-09-21 09:43:47
【问题描述】:

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

我发现这是可行的:

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

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

【问题讨论】:

  • 对我来说看起来很优雅...

标签: linux bash io centos pipe


【解决方案1】:

xargs 就是为此而生的:

rpm -qa | grep something | xargs rpm -ql

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 那肯定是另一种方式,我采用了你建议的别名,但我的问题的主要焦点是管道:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2012-06-07
    • 2012-06-26
    • 2018-12-10
    相关资源
    最近更新 更多