这个命令的作用是什么:exec > >(command)。

11
我看到在这里这里使用了以下结构:

exec > >(tee -a script.log)

我知道 tee 命令是什么,而 (command...) 通常意味着在子shell中执行命令,exec 用于将当前 shell 替换为程序,例如 exec ls(但这里没有命令),另外 > > 的含义是什么?谁能澄清这个黑魔法?
exec >{space}> (command)

@Seth? :) 你能给我一些关于这种魔法的更多阅读指针吗?谢谢。:)

1个回答

7
它用另一个替换了当前的会话,并将所有命令的输出写入script.log。这样,您可以正常使用您的 shell,您不会看到任何区别(大多数情况下),但所有输出都将显示在您的屏幕上和script.log文件中。从exec manpages

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

> (tee -a script.log)魔术字符创建了一个管道,因此我们不是像通常那样写入文件(在本例中使用>> script.log),而是写入进程tee -a script.log,它执行相同的操作。出于我不知道的某种原因,使用>>无效,但写入命名管道有效。此处有源代码。

那么,换句话说,我可以有更多的重定向吗?像 exec >(somecomamnd) >(anothercommand) >(thirdone) > [empty mean STDOUT?]?(就像我说的,我知道tee :)) - clt60
你也可以从多个地方读取内容,例如 diff <(ls /one) <(ls /two) - evgeny
1
这真的非常酷。可以创建多个类似管道的流程。是cmd >somewhere 2>error等的极其强大的补充。我很高兴学到新东西。 ;) - clt60

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接