我.hgignore今天试图从 Cygwin bash shell快速编辑一个文件,但我添加了一行错误。我不确定这是否是最好的方法,但我很快想到使用head -1 .hgignore删除有问题的行(我以前在文件中只有一行)。果然,执行时它给出了第一行作为唯一的输出。
但是当我尝试重定向输出并使用 重写文件时head -1 .hgignore > .hgignore,该文件为空。为什么会发生这种情况?如果我尝试附加,head -1 .hgignore >> .hgignore,它会正确附加,但这显然不是想要的结果。为什么在这种情况下截断重定向不起作用?
我知道这是另一个问题的重复(为什么这个排序命令给我一个空文件?)但我想扩展这个问题以回应给出的答案。
命令
shuf example.txt > example.txt
返回一个空白文件,因为 shell 在对文件进行 shuffle 之前将其截断,只留下一个空白文件进行 shuffle。然而,
cat example.txt | shuf > example.txt
将按预期生成一个混洗的文件。
当简单重定向不起作用时,为什么管道方法起作用?如果文件在命令运行之前被截断,第二种方法不应该也留下一个空文件吗?