file1"不起作用?-6ren"> file1"不起作用?-当我尝试对文件进行排序并将排序后的输出保存在自身中时,就像这样 sort file1 > file1; file1 的内容被完全删除,而当我尝试像这样使用“tee”命令执行相同操作时 sort fil-6ren">
gpt4 book ai didi

linux - 为什么 "sort file1 > file1"不起作用?

转载 作者:IT王子 更新时间:2023-10-29 00:22:26 26 4
gpt4 key购买 nike

当我尝试对文件进行排序并将排序后的输出保存在自身中时,就像这样

sort file1 > file1;

file1 的内容被完全删除,而当我尝试像这样使用“tee”命令执行相同操作时

sort file1 | tee file1;

它工作正常[编辑:“工作正常”仅适用于幸运时机的小文件,将导致大文件丢失数据或无益的进程调度],即它正在覆盖排序的输出file1 本身并在标准输出中显示它。

有人可以解释为什么第一个案例不起作用吗?

最佳答案

正如其他人所解释的,问题在于 I/O 重定向是在 sort 命令执行之前完成的,因此文件在 sort 获得机会之前被截断阅读它。如果您稍加思考,原因很明显 - shell 处理 I/O 重定向,并且必须在运行命令之前执行此操作。

sort 命令“始终”(至少从 UNIX 版本 7 开始)支持 -o 选项以使其安全地输出到其中一个输入文件:

sort -o file1 file1 file2 file3

tee 的技巧取决于时机和运气(可能还有一个小数据文件)。如果您有一个兆字节或更大的文件,我预计它会被 tee 命令破坏,至少部分破坏。也就是说,如果文件足够大,tee 命令将打开文件进行输出并在 sort 完成读取之前将其截断。

关于linux - 为什么 "sort file1 > file1"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com