重定向函数的输出在bash中是如何工作的



根据我所学到的,也在这个线程的答案中指出,stdout的重定向工作如下:

当我们做这样的事情时:ls > dirlistbash执行以下操作:

  1. 派生一个进程,该进程仍然运行bash
  2. 在子流程中,打开文件dirlist以写入文件描述符1
  3. 调用将CCD_ 4可执行文件传递给它的CCD_

这样,当ls写入FD 1时,它实际上会写入文件。

考虑到这一点,我想知道以下内容:

$ foo() { echo "hello" ; }
$ foo > file
$ cat file
hello

据我所知,函数在同一个shell进程中运行,那么在这种情况下重定向是如何工作的呢?

Redirection本身只是一个shell构造,因此shell可以让它按照自己的意愿工作每个命令,无论是外部进程还是shell内置,都有自己的标准输出概念,并且标准输出是由父进程的子进程继承的。在这种情况下,命令foo要么从shell继承其标准输出,要么接受shell重定向指定的任何文件。一旦进入函数,echo就会写入它从foo继承的任何文件

换句话说,对于它自己的内置命令(包括函数、复合语句,如whileif等(,shell有效地模拟了exec,而不需要实际调用exec

最新更新