关于Shell命令`ls > list`执行流程的正确性问询
root@VM-0-11-debian:~/linux/2023/01# ls root@VM-0-11-debian:~/linux/2023/01# ls > list root@VM-0-11-debian:~/linux/2023/01# ls list root@VM-0-11-debian:~/linux/2023/01# cat list list
问题咨询
已知>用于将标准输出(stdout)重定向至文件,若文件不存在则创建,存在则覆盖现有内容。现咨询:对Shell命令ls > list执行流程的下述理解是否正确?
- 1)由于
list文件不存在,首先创建名为list的文件; - 2)执行
ls命令列出当前目录内容,结果输出至标准输出; - 3)将标准输出中的内容以覆盖方式写入
list文件。
专业解答
你的理解顺序存在错误,Shell处理重定向和命令的逻辑并非如此,正确的执行流程是:
- Shell优先解析重定向操作,检测到目标文件
list不存在时,直接创建该文件;若文件已存在,则先清空其原有内容。 - Shell将
ls命令的标准输出(stdout)与这个已创建/清空的list文件建立关联。 - 执行
ls命令,此时ls的输出会直接写入到已关联的list文件中。
你看到最终list文件里的内容是list,正是因为在执行ls之前,list文件已经被创建完成,所以ls会把这个刚生成的文件也列入输出结果,最终写入到文件里。
内容的提问来源于stack exchange,提问作者jiakai
相关产品推荐
相关产品推荐

