首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解exec >>(命令)

理解exec >>(命令)
EN

Unix & Linux用户
提问于 2021-02-14 01:30:44
回答 1查看 839关注 0票数 5

我试图在以下代码中了解exec > >(tee logfile)的效果:

代码语言:javascript
复制
#!/bin/bash                                                                                                                 

exec 7>&1           # save stdout for later reset                                                                           

exec > >(tee logfile)          # point stdout to FIFO pointing to tee command?                                              
#+expect any subsequent output to stdout to be sent                                                                         
#+both to stdout and logfile.                                                                                               

# so let's send some output                                                                                                 
echo
echo howdy             # expect these strings to be sent both to terminal and                                               
echo g\'day            #+logfile                                                                                            
echo hello!

# restore stdout                                                                                                            
exec 1>&7
exec 7>&-

#check content of logfile!                                                                                                  
echo ------------
cat logfile

我只是在这里猜测,exec > >(tee logfile)将把标准输出重定向到>(tee logfile)

以下是运行此脚本时对终端的输出:

代码语言:javascript
复制
--------------------

howdy
g'day
hello!

howdy
g'day
hello!

以下是日志文件的内容:

代码语言:javascript
复制
howdy
g'day
hello!

我试图将stdout重定向回终端似乎没有效果:exec 1>&7。也许,exec 1>&7是在日志文件被写入并将其内容发送到终端之后发生的。

当脚本执行时,我不明白输出到终端。我猜exec > >(tee logfile)是被阻塞的,直到cat logfile读取它。由于tee logfile的存在,日志文件的内容被复制到终端。

你能帮我理解这几点吗?

谢谢。

EN

回答 1

Unix & Linux用户

发布于 2021-02-14 02:59:46

逗号的一般形式是exec > output,它使所有进一步的输出都被发送到文件" output“。

这可以扩展;例如exec 2> error将导致所有进一步输出到stderr发送到文件"error“。

现在,>(...)是一种bashism,它意味着将输出写入命令;在本例中,该命令是"tee“。

所以我们把两者加在一起。

exec > >(tee logfile)的意思是“将所有进一步的输出写入命令tee logfile”。

这意味着所有未来的输出将被发送到屏幕并(通过tee)发送到"logfile“文件。

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/634350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档