理解非存在文件的shell重定向

Sen*_*ran 0 unix shell io-redirection

ls > ls.out
Run Code Online (Sandbox Code Playgroud)

这也包括列表中的ls.out.我的理解是:>(shell输出重定向操作符首先创建一个文件(取STDOUT),如果它尚未存在,然后ls命令即将发挥,它在输出中包含刚刚创建的ls.out文件.这是否正确?如果没有,请您详细说明该命令的运作情况.

同样

wc temp > temp
Run Code Online (Sandbox Code Playgroud)

将在刚刚创建的临时文件中打印0 0 0 temp.

shell的这种行为很有趣.我想知道它是如何工作的.顺便说一句,两者都是Unix编程环境手册中的练习.正如我上面提到的答案,我想要一些专家纠正我的理解.

Ada*_*eld 6

当重定向标准输出时>,如果文件尚不存在,shell将创建该文件(作为空文件).此外,该文件在shell分叉并执行正在执行的命令之前打开.执行此操作时wc temp > temp,shell将打开文件以进行写入,然后打开forks和exec wc,并在此过程中传递其打开的文件句柄.