【问题标题】:`tee` command equivalent for *input*?`tee` 命令等效于 *input*?
【发布时间】:2009-02-26 13:30:00
【问题描述】:

unix tee 命令将标准输入拆分为标准输出和一个文件。

我需要的是另一种工作方式,将多个输入合并到一个输出 - 我需要连接两个(或更多)命令的标准输出。
不确定这个应用程序的语义应该是什么 - 假设每个参数都是一个完整的命令。

例子:

>  eet "echo 1" "echo 2" > file.txt

应该生成一个有内容的文件

1
2

我试过了

>  echo 1 && echo 2 > zz.txt

它不起作用。

旁注:我知道我可以将每个命令的输出附加到文件中,但我想一次性完成(实际上,我想将合并的输出通过管道传输到另一个程序).
另外,我可以自己动手,但只要我负担得起,我就很懒惰:-)

哦,是的,如果它在 Windows 中工作会很好(尽管我猜任何 bash/linux 风格的解决方案都可以通过 UnxUtils/msys/etc 工作)

【问题讨论】:

    标签: console stdout stdin


    【解决方案1】:

    试试

    ( echo 1; echo 2 ) > file.txt
    

    生成一个子shell并在那里执行命令

    { echo 1; echo 2; } > file.txt
    

    也是可能的。这不会产生子shell(最后一个命令后的分号很重要)

    【讨论】:

    • 你用的是什么外壳?我在 windows 的 cmd.exe 中尝试了第一个,文件的内容是 '1;回声 2' ;第二个选项根本不起作用。
    • 我让它像这样在 cmd.exe 中工作:( echo 1 && echo 2 ) > file.txt
    • 我在 linux 上使用 bash。 ( echo 1 && echo 2 )仅在 echo 1 返回 0(成功)时才有效! && 表示类似于 AND 的意思,只有在 echo 1 没有失败时才会执行 echo 2
    【解决方案2】:

    我猜你想要的是并行运行这两个命令,并将两个输出合并到另一个命令。

    我愿意:

    ( echo 1 & echo 2 ) | cat
    

    其中“echo 1”和“echo 2”是生成输出的命令,“cat”是接收合并输出的命令。

    【讨论】:

      【解决方案3】:

      echo 1 > zz.txt && echo 2 >> zz.txt

      应该可以。您真正要做的就是依次运行两个命令,其中第一个重定向到一个文件,然后,如果成功,您运行另一个命令,将其输出附加到您首先编写的文件的末尾.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-01
        • 2012-08-29
        • 2012-12-03
        相关资源
        最近更新 更多