【问题标题】:linux shell stream redirection to run a list of commands directlylinux shell流重定向直接运行命令列表
【发布时间】:2011-07-26 16:26:08
【问题描述】:

我有这个 svn 项目...获取未添加文件的列表(在我的例子中,数百个):

svn status |grep "^?"

输出

? somefile.txt
? somefile1.txt
? somefile2.txt

我最近被介绍给 sed...所以现在我有一个我想要运行的命令列表

svn status | grep "^?"|sed "s/^?/svn add/"

输出

svn add somefile.txt
svn add somefile1.txt
svn add somefile2.txt

我意识到我可以将它通过管道传输到一个文件中

svn status | grep "^?"|sed "s/^?/svn add/" >out.sh && sh out.sh && rm out.sh

但我想避免写入临时文件。有没有办法将它传递给这样的命令:

svn status | grep "^?"|sed "s/^?/svn add/" |some_command_that_runs_each_line

【问题讨论】:

    标签: linux bash shell command-line io-redirection


    【解决方案1】:

    bash/sh呢?

    svn status | grep "^?"|sed "s/^?/svn add/" | bash
    

    【讨论】:

    • 你的答案现在似乎很明显,但我不知道 bash/sh 可以接受流重定向。谢谢。
    【解决方案2】:

    您正在寻找的是xargs 命令:

    svn status | grep "^?" | sed "s/^..//" | xargs svn add
    

    您也可以使用替换:

    svn add `svn status | grep "^?"` | cut -c 3-`
    

    【讨论】:

    • 需要去掉?,所以在grep后面的管道中添加cut -d " " -f 2-
    【解决方案3】:

    怎么样:

    for i in `svn status | grep "^?"|sed "s/^?/svn add/"`
    do
        $i
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2021-11-09
      相关资源
      最近更新 更多