为什么执行 ls >empty.txt 显示空文件夹中的empty.txt 中的empty.txt?

为什么执行 ls >empty.txt 显示空文件夹中的empty.txt 中的empty.txt?

为什么在空文件夹中执行ls > empty.txt显示我空.txt里面空.txt

这不是诗,它是真实的,我不知道为什么。

对我来说,他们的思考方式ls > empty.txt如下一步步:

  1. ls被执行,我得到输出(空白就在那一刻)
  2. >意味着我得到了输出上一个命令的(实际上fd 2
  3. empty.txt是获取(无)输出的文件的名称ls

那么为什么要跑步

猫空.txt

我明白了

empty.txt 

如果文件夹是空的?

答案1

你的顺序是错误的。 shell 不会让每个程序都知道如何重定向输出,而是会进行重定向。

所以发生的事情是

  1. shell 启动一个新的 shell 来处理该命令。
  2. 原始 shell 等待新 shell 完成。
  3. 新的 shell 处理> empty.txt,其中涉及创建文件。
  4. 新的外壳将自身替换为ls
  5. ls 运行,列出空的.txt 文件,然后退出。
  6. 原来的 shell 被通知新的 shell(已成为 ls)已完成并打印新的提示符。

相关内容