Unix:cat-ing 文件自身 - 为什么这会清空文件? [复制]

2024-03-02

有人可以向我解释一下为什么这段代码有效吗(即 file2.txt 是 file1.txt 按字母顺序排序的内容):

cat file1.txt | sort > file2.txt

但是当我这样做时,file1.txt 会自动变成空白...?

cat file1.txt | sort > file1.txt

正如您所猜测的,我试图简单地按字母顺序对文件的内容进行排序,然后写回同一个文件......

(我使用的是mac 10.8.3的终端。撰写日期是2013年5月19日)


外壳启动sort打开后file1.txt用于输出(截断它,即丢弃所有数据)。然后就开始了cat with file1.txt开放阅读。 shell 的语义使得管道可以从以下位置获取一页左右的输入:file.txt,但实际上几乎所有 shell(也就是说所有 shell,但也许有一些我从未使用过的 shell 不会以这种方式运行)会在之前截断文件cat曾经读取过任何数据。

要执行此操作,您必须使用临时文件。 (嗯,使用临时文件不是强制性的。如果文件足够小,类似这样的东西可能会起作用cat file1.txt | ( sleep 2; sort > file1.txt ),但不保证。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unix:cat-ing 文件自身 - 为什么这会清空文件? [复制] 的相关文章

随机推荐