2013-10-27 63 views
-1

当我运行命令:输入重定向一样输出重定向

猫< FOO>富

随着是atribary文件,我想将保持因为我们使foo的输入和输出命令。但事实证明,这个命令擦除foo。否则,如果我通过

猫< FOO>酒吧重定向输入酒吧

然后我酒吧FOO的副本。我无法弄清楚为什么?我在这里错过了什么?

回答

1

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

壳牌不知道或不在乎cat做什么。它只知道它应该运行cat并使其从一个文件中读取输入并重定向到另一个文件。

如果你想替换文件foo内容与命令的输出,最便携的方式是使用临时文件。下面是它的骨架:

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