exec > >(tee -a script.log)
我知道tee命令是什么,而(命令...)通常意味着在子shell中执行command
,exec用一个程序替换当前的shell,如exec ls
,(但这里没有命令)另外还有> >
的含义?
有人可以澄清这种黑暗的威胁吗?
exec >{space}> (command)
@Seth? :)任何指针,我可以阅读更多关于这个魔法将不胜感激。 :)
答案 0 :(得分:8)
它将当前bash
会话替换为另一个会话,并将所有命令的输出写入script.log
。
通过这种方式,您可以正常使用bash
外壳,并且您不会发现任何差异(主要是),但所有输出都会显示在屏幕上和在script.log
文件中。
如果提供了命令,它将替换shell而不创建新进程。如果未指定命令,则可以使用重定向来影响当前的shell环境。
>(tee -a script.log)
魔术会创建一个管道,所以我们不会像我们那样写文件(在这种情况下使用>> script.log
),而是写入进程tee -a script.log
,它会执行相同。由于某些原因我不知道,使用>>
不起作用,但写入命名管道是有效的。 Source here