如果我做ls -la,我会得到像
这样的结果total 16
drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 .
drwx------+ 23 rockse staff 782 Apr 28 16:48 ..
-rw-r--r-- 1 rockse staff 32 Apr 28 16:49 1.sh
-rw-r--r-- 1 rockse staff 215 Apr 28 17:01 ls-1.txt
但如果我做ls -la> ls-1.txt,我明白了
total 8
drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 .
drwx------+ 23 rockse staff 782 Apr 28 16:48 ..
-rw-r--r-- 1 rockse staff 32 Apr 28 16:49 1.sh
-rw-r--r-- 1 rockse staff 0 Apr 28 17:06 ls-1.txt
我知道创建了一个文件,然后将ls -la
写入同一文件,但为什么在创建文件之前它没有捕获ls -la
的快照,因为我们只是将stdout写入文件?
答案 0 :(得分:1)
重定向由shell完成,而不是您正在运行的程序。 shell执行此操作的过程类似于此(简化):
stdout
连接到输出文件流步骤2创建文件,因此当程序在步骤4中运行时,它将可见。
如果在步骤4之后完成第2步,则无法将程序的stdout
更改为指向它。