-1

当我运行命令时:

猫 < foo > foo

由于foo是一个 atribary 文件,我认为foo将保持不变,因为我们将foo作为cat命令的输入和输出。但事实证明,这个命令擦除foo。否则,如果我将输入重定向到bar by

猫 < foo > 酒吧

然后我得到barfoo的副本。我想不通为什么?我在这里缺少什么?

4

1 回答 1

1

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

壳牌不知道也不关心做什么cat。它所知道的只是它应该运行cat并使其从一个文件读取输入并重定向到另一个文件。

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

tmpfile=.....  # temporary name - see mktemp for portable secure ways to create it!
cat < foo > $tmpfile
mv $tmpfile foo
于 2013-10-27T23:46:17.580 回答