首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于exec的“exec FD>`”形式

关于exec的“exec FD>`”形式
EN

Unix & Linux用户
提问于 2016-11-01 09:12:31
回答 1查看 737关注 0票数 2

我在zsh手册页面中找不到任何东西,它确切地解释了下面的操作(例如)

代码语言:javascript
复制
exec 3> /tmp/foo

我为exec找到的所有适当文档都引用了exec后面跟着一个“简单命令”的形式。(例如见man zshbuiltinsman zshmisc.)( exec FD>表单在man zshmisc中有简短的提到,但是在我看来,在一段文章中,假设这个表单已经在其他地方有了完整和正确的文档。)

我看了所有的作品

代码语言:javascript
复制
man zshall | grep -P '\bexec\b'

...but没有一个是我要找的。

有人知道丢失的文件有什么好的替代品吗?

PS:我认为“缺少文档”的一个可能的解释是,像exec 3> /tmp/foo这样的表单实际上是表单"exec简单命令“的特例。但是,如果是这样的话,那么我想找到一些文档来解释(例如,3> /tmp/foo是一个简单的命令(如果我在命令行上运行这个“简单命令”,它只是挂起直到我点击^C);和(2)为什么脚本中的代码是在exec 3> /tmp/foo之类的东西被计算之后发生的,而在(比如说exec date )之后发生的。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-11-02 00:50:23

带命令和不带命令的exec的含义是不相关的。我想内置的名称是过载的,因为一个意思对一个命令没有意义,而另一个没有命令就没有意义,所以这样做可以避免发明一个新的名称,这样就不能在另一个命令中使用。

手册指出:

如果省略了命令,但指定了任何重定向,则重定向将在当前shell中生效。

这意味着,像exec 3> /tmp/foo这样的东西会在运行的shell进程中更改文件描述符3指向的内容。像/bin/somecommand 3>/tmp/foo这样的shell代码段意味着以下内容:

  1. 创建一个子进程。
  2. 打开/tmp/foo,以便在子进程中的文件描述符3上写入。
  3. 在子进程中执行文件/bin/somecommand

exec 3>/tmp/foo只执行步骤3,它对进程没有任何作用。

exec 3>/tmp/foo之后,从shell及其子进程对文件描述符3的所有后续访问都会转到/tmp/foo,就像任何其他重定向一样。例如,假设您在终端中运行以下脚本,而没有连接到文件描述符3:

代码语言:javascript
复制
echo hello           # prints to the terminal
echo nope >&3        # complains about a bad descriptor since no file is open on fd 3
exec >/tmp/out 3>/tmp/three
echo hello           # writes to /tmp/out
echo howdy >&3       # writes to /tmp/three
echo wibble >&3      # writes a second line to /tmp/three
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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