我试图在UNIX上执行以下命令.
$ cat file1>file2>file3
Run Code Online (Sandbox Code Playgroud)
在仅file1存在的情况下,我认为应该发生的是:
file2应该用内容创建file1,file3从内容file2.实际发生的是:
file2并file3得到创造和file3 有的内容 file1file2没有 - file2被创建但是它是空白/空的.谁能解释为什么会这样?
在运行命令之前,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最终为空.