代码之家  ›  专栏  ›  技术社区  ›  Keith Bentrup

如何在*nix shell中一次使用一个参数执行命令?

  •  1
  • Keith Bentrup  · 技术社区  · 15 年前

    grep 'pattern' | svn log

    我可以使用find的exec选项执行此操作: find -name '*.jsp' -exec svn log {} \; . 但是,grep和find提供了不同的功能,并且-exec选项不适用于grep或许多其他工具。

    那么,有没有一种通用的方法可以从unix命令行工具获取输出,并让它像find那样对每个独立的输出执行任意命令呢?

    3 回复  |  直到 15 年前
        1
  •  9
  •   user181548 user181548    15 年前

    答案是 xargs -n 1 .

    echo moo cow boo | xargs -n 1 echo
    

    输出

    moo
    cow
    boo
    
        2
  •  0
  •   tristan    15 年前

    试试xargs:

    grep 'pattern' | xargs svn log
    
        3
  •  0
  •   Tim Post Samir J M Araujo    15 年前

    一个小的一次性shell脚本(使用xargs比一次性脚本好得多,这就是它存在的原因)

    #!/bin/sh
    
    # Shift past argv[0]
    shift 1
    
    for file in "$@"
    do
            svn log $file
    done
    

    你可以把它命名为“多日志”或类似的东西。可以这样称呼:

    ./multilog.sh foo.c abc.php bar.h Makefile

    当被自动构建脚本调用时,它允许一点更健全的操作,即在与SVN对话之前测试每个脚本的存在性,或者将每个输出重定向到一个单独的文件,将其插入sqlite数据库,等等。