我在zsh手册页面中找不到任何东西,它确切地解释了下面的操作(例如)
exec 3> /tmp/foo我为exec找到的所有适当文档都引用了exec后面跟着一个“简单命令”的形式。(例如见man zshbuiltins和man zshmisc.)( exec FD>表单在man zshmisc中有简短的提到,但是在我看来,在一段文章中,假设这个表单已经在其他地方有了完整和正确的文档。)
我看了所有的作品
man zshall | grep -P '\bexec\b'...but没有一个是我要找的。
有人知道丢失的文件有什么好的替代品吗?
PS:我认为“缺少文档”的一个可能的解释是,像exec 3> /tmp/foo这样的表单实际上是表单"exec简单命令“的特例。但是,如果是这样的话,那么我想找到一些文档来解释(例如,3> /tmp/foo是一个简单的命令(如果我在命令行上运行这个“简单命令”,它只是挂起直到我点击^C);和(2)为什么脚本中的代码是在exec 3> /tmp/foo之类的东西被计算之后发生的,而在(比如说exec date )之后发生的。
发布于 2016-11-02 00:50:23
带命令和不带命令的exec的含义是不相关的。我想内置的名称是过载的,因为一个意思对一个命令没有意义,而另一个没有命令就没有意义,所以这样做可以避免发明一个新的名称,这样就不能在另一个命令中使用。
手册指出:
如果省略了命令,但指定了任何重定向,则重定向将在当前shell中生效。
这意味着,像exec 3> /tmp/foo这样的东西会在运行的shell进程中更改文件描述符3指向的内容。像/bin/somecommand 3>/tmp/foo这样的shell代码段意味着以下内容:
/tmp/foo,以便在子进程中的文件描述符3上写入。/bin/somecommand。exec 3>/tmp/foo只执行步骤3,它对进程没有任何作用。
在exec 3>/tmp/foo之后,从shell及其子进程对文件描述符3的所有后续访问都会转到/tmp/foo,就像任何其他重定向一样。例如,假设您在终端中运行以下脚本,而没有连接到文件描述符3:
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/threehttps://unix.stackexchange.com/questions/320256
复制相似问题