0

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

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

之后,我像这样运行另一个 shell 脚本:

$ cat file2.txt

它的输出是:

./file1.txt
./file2.txt

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

4

2 回答 2

3

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

如果您考虑一下,这是有道理的。重定向必须在find执行之前完成。您不能让它先写入终端然后再转到文件,即使有一种机制允许这样做。

于 2013-08-22T14:40:40.907 回答
2

你是对的:shellopen首先是输出文件,然后创建它。然后它创建一个子进程fork。然后 shell 关闭文件并等待子进程返回。子进程调用dupdup2打开文件描述符为 1 的输出文件,然后它才使用该exec系列的功能之一执行命令。

于 2013-08-22T14:41:37.837 回答