如果我执行 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
的快照文件,因为我们只是将标准输出写入文件?
最佳答案
重定向是由 shell 完成的,而不是您正在运行的程序。 shell 为实现这一点所做的处理与此类似(简化):
- fork 一个子进程
- 打开输出文件
- 将
stdout
连接到输出文件流 - 执行程序
第 2 步创建文件,因此当程序在第 4 步中运行时它将可见。
如果第 2 步在第 4 步之后完成,则无法更改程序的 stdout
以指向它。
关于linux - ls -la 和 ls -la > ls-1.txt 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920068/