如果我做了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写到文件中呢?
发布于 2016-04-28 16:48:09
重定向是由shell完成的,而不是您正在运行的程序。shell为实现这一点所做的处理与以下(简化)类似:
stdout
连接到输出文件流步骤2创建文件,因此当程序在步骤4中运行时,它将是可见的。
如果步骤2是在步骤4之后完成的,就不可能将程序的stdout
更改为指向它。
https://stackoverflow.com/questions/36920068
复制相似问题