Linux 将文件的cat输出重定向到同一文件

Linux 将文件的cat输出重定向到同一文件,linux,unix,terminal,cat,Linux,Unix,Terminal,Cat,在一个特定的目录中,我创建了一个名为“fileName”的文件,并向其中添加了内容。当我键入cat fileName时,它的内容会打印在终端上。现在我使用了以下命令: cat文件名>文件名 没有显示任何错误。现在,当我尝试使用查看文件内容时 cat文件名 终端中没有显示任何内容,并且文件为空(当我检查它时)。原因是什么?即重定向到同一文件将在调用cat命令之前创建/截断该文件,因为它具有更高的优先级。通过使用中间文件,然后从中间文件到实际文件,您可以避免相同的情况,或者您可以使用tee,如: c

在一个特定的目录中,我创建了一个名为“fileName”的文件,并向其中添加了内容。当我键入
cat fileName
时,它的内容会打印在终端上。现在我使用了以下命令:

cat文件名>文件名

没有显示任何错误。现在,当我尝试使用查看文件内容时

cat文件名


终端中没有显示任何内容,并且文件为空(当我检查它时)。原因是什么?

即重定向到同一文件将在调用cat命令之前创建/截断该文件,因为它具有更高的优先级。通过使用中间文件,然后从中间文件到实际文件,您可以避免相同的情况,或者您可以使用tee,如:

cat fileName | tee fileName

为了澄清SMA的回答,文件被截断,因为重定向由shell处理,shell在调用命令之前打开文件进行写入。当您运行
cat file>file
时,shell会截断并打开该文件进行写入,将stdout设置为该文件,然后执行
[“cat”,“file”]
。因此,您必须使用其他一些命令来执行任务,如
tee

我可以知道downvote@downvoter的原因吗?当你们否决一个答案时,请发表评论,这样它也会帮助其他人,当然也会帮助我!由于某些原因,如果流通过另一个sed命令,则该命令不起作用:答案是正确的,但示例似乎不起作用,只是几个后续调用
echo'hello'| cat-text | tee text
偶尔重写文件
text
;由于某种原因,这个命令没有立即执行。我知道下一票的原因吗?当你否决一个答案时,请发表评论