在我的桌面上,只有一个文件,它的名字是“file1.txt”,然后我像这样执行shell脚本:
$ find . -name "*.txt" > file2.txt
之后,我运行其他shell脚本:
$ cat file2.txt
它的输出是:
./file1.txt
./file2.txt
所以看起来find
命令的执行是在文件“file2.txt”的创建之后,我是对的吗?
答案 0 :(得分:3)
你是对的; I / O重定向在执行find
命令之前发生,因此当file2.txt
命令运行时,文件find
已经存在(但为空)。因此,find
命令的输出将包括file2.txt
。
如果你考虑它就有意义了。重定向必须在find
执行之前完成。你不能先把它写到终端然后转到文件,即使有一种机制允许这样做。
答案 1 :(得分:2)
你是对的:shell open
首先是输出文件,然后创建它。然后它创建一个fork
的子流程。然后shell关闭文件并等待子进程返回。子进程调用dup
或dup2
以打开带有文件描述符1的输出文件,然后它才会使用exec
系列的一个函数执行命令。