通常我们使用不同的文件来重定向输出。
例如 :
cat < first > temp
在这个命令中, first 的内容被重定向到 temp 而不是标准输出。
那么如果我使用相同的文件名,为什么它会截断文件?
为什么它不能覆盖同一个文件?
cat < first > first
通常我们使用不同的文件来重定向输出。
例如 :
cat < first > temp
在这个命令中, first 的内容被重定向到 temp 而不是标准输出。
那么如果我使用相同的文件名,为什么它会截断文件?
为什么它不能覆盖同一个文件?
cat < first > first
当您像这样使用 I/O 重定向时,“输入”和“输出”文件都会在命令执行之前由 shell 打开。打开文件进行覆盖与在写入前截断文件相同。结果:
cat
在输入时看到一个空文件...因为在一般情况下处理它会非常复杂。只需考虑以下示例:
程序逐行读取文件,每行输出两次。现在为了在没有第二个文件(即在同一个文件上)的情况下工作,程序需要缓冲它将读取的大部分(所有)行,因为否则它们将在被读取之前被覆盖。
为了保持问题,简单的程序通常使用辅助的临时文件,一旦完成,它们就会在原始文件上移动。例如,这就是
sed -i
(内联)的工作方式。通常在这种情况下重定向的语法应该是
cat first > temp
. 这意味着cat
的输出first
被发送到 的文件中temp
。对于您的 statementcat < first > temp
,输出cat
在再次重定向到 out 时尚未完成。没有结果就没有结果。但是
cat
ing 一个文件并将输出重定向到另一个文件与基本的cp
.