为什么在空文件夹中执行ls > empty.txt
显示我空.txt里面空.txt?
这不是诗,它是真实的,我不知道为什么。
对我来说,他们的思考方式ls > empty.txt
如下一步步:
ls
被执行,我得到输出(空白就在那一刻)>
意味着我得到了输出上一个命令的(实际上fd 2
)empty.txt
是获取(无)输出的文件的名称ls
。
那么为什么要跑步
猫空.txt
我明白了
empty.txt
如果文件夹是空的?
答案1
你的顺序是错误的。 shell 不会让每个程序都知道如何重定向输出,而是会进行重定向。
所以发生的事情是
- shell 启动一个新的 shell 来处理该命令。
- 原始 shell 等待新 shell 完成。
- 新的 shell 处理
> empty.txt
,其中涉及创建文件。 - 新的外壳将自身替换为
ls
- ls 运行,列出空的.txt 文件,然后退出。
- 原来的 shell 被通知新的 shell(已成为 ls)已完成并打印新的提示符。