【问题标题】:What exactly does this do: exec > > (command)这究竟是做什么的: exec > >(命令)
【发布时间】:2011-05-28 11:23:24
【问题描述】:

我看到herehere too 的结构如下:

exec > >(tee -a script.log)

我知道 tee 命令是什么,(command...) 通常表示在子shell 中执行command,exec 用程序替换当前shell,例如exec ls,(但这里有没有命令)以及> > 是什么意思?

谁能解释一下这个黑暗的巫术?

exec >{space}> (command)

@赛斯? :) 任何我可以阅读更多关于这个魔法的指针都将不胜感激。 :)

【问题讨论】:

    标签: bash


    【解决方案1】:

    它将当前的bash 会话替换为另一个会话,并将所有命令的输出写入script.log

    这样,您可以正常使用您的bash shell,并且您不会看到任何区别(大部分情况下),但所有输出都会显示在您的屏幕上 script.log 文件。

    来自exec manpages

    如果提供了命令,它会替换 shell 而不会创建新进程。如果没有指定命令,可能会使用重定向来影响当前的 shell 环境。

    >(tee -a script.log) 魔法创建了一个管道,因此我们不会像我们那样(在这种情况下使用>> script.log)写入文件,而是写入进程tee -a script.log,它的作用相同。出于某种我不知道的原因,使用>> 不起作用,但写入命名管道有效。 Source here

    【讨论】:

    • 那么,换句话说,我可以有更多的重定向?像 exec >(somecomamnd) >(anothercommand) >(thirdone) > [empty mean STDOUT?] ? (正如我所说,我知道 tee :)
    • 你也可以读取多个内容,例如diff <(ls /one) <(ls /two)
    • 这真的很酷。可以产生几个管状的流动。对 cmd >somewhere 2>error 等非常强大的补充。我很高兴学习新事物。 ;)
    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多