为什么在'cat file1> file2> file3'之后file2为空?

G.D*_*.D. 2 unix cat

我试图在UNIX上执行以下命令.

$ cat file1>file2>file3
Run Code Online (Sandbox Code Playgroud)

在仅file1存在的情况下,我认为应该发生的是:

  • file2应该用内容创建file1,
  • 然后file3从内容file2.

实际发生的是:

  • file2file3得到创造和
  • file3 有的内容 file1
  • 但是file2没有 - file2被创建但是它是空白/空的.

谁能解释为什么会这样?

Chr*_*odd 6

在运行命令之前,shell会从左到右解释文件重定向.所以当你进入

cat file1 > file2 > file3
Run Code Online (Sandbox Code Playgroud)

它首先进行重定向> file2- 创建或清空file2并指向stdout.然后它会> file 3,创建或清空file3并指向那里的标准输出.最后,它运行命令cat file1,读取file1并将其复制到stdout.由于stdout(现在)指向file3,file3最终成为它的副本.因为stdout在指向时没有写入任何内容file2,所以file2最终为空.