【问题标题】:How to pass command with parameters to xargs如何将带参数的命令传递给 xargs
【发布时间】:2016-01-08 15:42:29
【问题描述】:

echo ls -l -a / | xargs sh -c

如何使上述命令生效?

只列出当前目录

似乎只有 ls 被传递给 xargs

echo '"ls -l -a /"' | xargs sh -c 虽然可以工作,但我得到的输入没有“”

【问题讨论】:

    标签: linux bash xargs


    【解决方案1】:

    来源:http://www.unixmantra.com/2013/12/xargs-all-in-one-tutorial-guide.html

    正如@darklion 所提到的,-I 表示参数列表标记,-c 表示要在 xargs 的每个输入行上运行的 bash 命令。

    只需将输入打印到 xargs:

    ls -d */ | xargs echo
    #One at a time
    ls -d */ | xargs -n1 echo
    

    对每个输入的更多操作:

    ls -d */  | xargs -n1 -I {} /bin/bash -c ' echo {}; ls -l {}; '
    

    您可以将 {} 替换为自定义字符串:

    ls -d */  | xargs -n1 -I file /bin/bash -c ' echo file; ls -l file; '
    

    【讨论】:

      【解决方案2】:

      sh-c 标志只接受一个参数,而 xargs 将参数拆分为空格 - 这就是双引号起作用的原因(一个级别使其成为 shell 的单个单词,一个级别用于 xargs)。

      如果您对xargs 使用-0null 参数,您的特定情况将起作用:

      回声 ls -l -a / | xargs -0 sh -c

      【讨论】:

      • 其他选项:echo ls -l -a / | xargs -I '{}' sh -c "{}"
      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2019-03-22
      • 2010-09-11
      相关资源
      最近更新 更多