输入重定向与输出重定向相同

时间:2013-10-27 12:06:18

标签: unix io-redirection

当我运行命令时:

  

cat< foo> FOO

foo 是一个属性文件,我认为 foo 将保持不变,因为我们 foo 输入和输出 cat 命令。但结果是这个命令擦除了 foo 。否则,如果我将输入重定向到

  

cat< foo>杆

然后我得到 bar foo 的副本。我无法弄明白为什么?我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

将输出重定向到文件是由运行命令的shell完成的,它会导致文件的内容被完全删除,这正是您在第一个命令中看到的内容。第二个命令创建一个新文件bar(或覆盖它)。

Shell并不了解或关心cat做了什么。它只知道它应该运行cat并让它从一个文件读取它并重定向到另一个文件。

如果要使用命令的输出替换文件foo内容,则大多数可移植方式都使用临时文件。下面是它的骨架:

tmpfile=.....  # temporary name - see mktemp for portable secure ways to create it!
cat < foo > $tmpfile
mv $tmpfile foo