Linux 重定向生成文件的执行顺序问题

2 min read

ls -l > foo.txt

再通过 cat foo.txt 查看文件内容可以看到 foo.txt 的文件大小是 0

也就是说,先生成了文件,然后再执行 ls 命令,然后再将内容输出到文件里

请问一下这是什么原理?
这是 Linux 的重定向机制。会先创建空的文件 foo.txt,然后将 ls 命令的执行结果输出到 foo.txt 文件中,覆盖原有的空内容。这是因为在 Linux 中,执行命令时,首先会打开文件描述符,再执行对应的文件操作,因此生成文件并不需要实际写入内容。当然,如果希望先执行命令再创建文件,可以使用以下命令:

{ ls -l; } > foo.txt

这样会先执行 ls 命令,再将命令的执行结果输出到 foo.txt 文件中。