差异b / w ls -la和ls -la> LS-1.TXT

时间:2016-04-28 16:10:57

标签: linux bash shell

如果我做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写入文件?

1 个答案:

答案 0 :(得分:1)

重定向由shell完成,而不是您正在运行的程序。 shell执行此操作的过程类似于此(简化):

  1. 分叉子进程
  2. 打开输出文件
  3. stdout连接到输出文件流
  4. 执行程序
  5. 步骤2创建文件,因此当程序在步骤4中运行时,它将可见。

    如果在步骤4之后完成第2步,则无法将程序的stdout更改为指向它。