何时相对于Linux shell中的命令执行发生I / O重定向?

时间:2013-08-22 14:35:37

标签: linux shell find

在我的桌面上,只有一个文件,它的名字是“file1.txt”,然后我像这样执行shell脚本:

$ find . -name "*.txt" > file2.txt

之后,我运行其他shell脚本:

$ cat file2.txt

它的输出是:

./file1.txt
./file2.txt

所以看起来find命令的执行是在文件“file2.txt”的创建之后,我是对的吗?

2 个答案:

答案 0 :(得分:3)

你是对的; I / O重定向在执行find命令之前发生,因此当file2.txt命令运行时,文件find已经存在(但为空)。因此,find命令的输出将包括file2.txt

如果你考虑它就有意义了。重定向必须在find执行之前完成。你不能先把它写到终端然后转到文件,即使有一种机制允许这样做。

答案 1 :(得分:2)

你是对的:shell open首先是输出文件,然后创建它。然后它创建一个fork的子流程。然后shell关闭文件并等待子进程返回。子进程调用dupdup2以打开带有文件描述符1的输出文件,然后它才会使用exec系列的一个函数执行命令。