为什么重定向到同一文件会截断该文件?


11

通常,我们使用其他文件来重定向输出。

例如 :

cat < first > temp

在此命令中,first的内容重定向到temp而不是标准输出。

那如果我使用相同的文件名,为什么会截断文件呢?

为什么不能覆盖相同的文件?

cat < first > first 

Answers:


19

当您使用I / O重定向时,shell将执行命令之前同时打开“ input”和“ output”文件。打开文件进行覆盖与在写入之前将其截断相同。结果:cat在输入中看到一个空文件...


0

因为在一般情况下处理它会非常复杂。请考虑以下示例:

程序逐行读取文件,然后每行输出两次。现在,要使它在没有第二个文件的情况下(即在同一文件中)工作,程序将需要缓冲将要读取的大多数(所有)行,因为否则在被读取之前它们将被覆盖。

为了解决问题,简单的程序通常使用辅助的临时文件,一旦完成,它们就会移到原始文件上。例如,这就是sed -i(内联)的工作方式。


0

通常,在这种情况下,重定向的语法应为cat first > temp。这意味着cat的输出将first发送到的文件temp。对于您的语句cat < first > temp,在cat再次将其重定向到输出时,输出尚未完成。一无所有导致一无所有。

但是,将cat一个文件和输出重定向到另一个文件与基本没有什么不同cp


cat < first > temp效果很好。
2010年1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.