Linux的sort命令排序后重定向原来的文件为什么为空?

恋喵大鲤鱼
博客专家认证
2017-03-10 03:21:19
Linux的sort命令排序后重定向到原来的文件为什么为空?

比如文件file.txt的内容是:
hello1
hello2

那么使用命令 sort file.txt > file.txt 后,file.txt变为空,为什么?
...全文
1613 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
utt@Delimola 2020-02-19
  • 打赏
  • 举报
回复
引用 7 楼 codingMozart 的回复:
这么说吧 open(file_right) clear(file_right) res = sort(file_left) write(res, file_right) 由于你的左右文件相同,所以在sort(file_left)时,file_left已经是空文件了,所以res是空的,写到right_file也是空的
恋喵大鲤鱼 2017-07-16
  • 打赏
  • 举报
回复
引用 6 楼 codingMozart 的回复:
引用 5 楼 K346K346 的回复:
[quote=引用 3 楼 codingMozart 的回复:] > 在shell里大概是这样 打开文件 -> 清除原有内容 ->执行左边的程序 ->输出到该文件 所以排序的时候文件已经是空的了
按照您的理解,sort file>newfile,执行完毕后原文件file应该为空,但是并不为空!
是清空new file(如果newfile存在的话),不是清空file[/quote]
引用 6 楼 codingMozart 的回复:
引用 5 楼 K346K346 的回复:
[quote=引用 3 楼 codingMozart 的回复:] > 在shell里大概是这样 打开文件 -> 清除原有内容 ->执行左边的程序 ->输出到该文件 所以排序的时候文件已经是空的了
按照您的理解,sort file>newfile,执行完毕后原文件file应该为空,但是并不为空!
是清空new file(如果newfile存在的话),不是清空file[/quote]感谢您的解答,这个有什么参考文献可以佐证吗?
引用 2 楼 K346K346 的回复:
引用 1 楼 q3733353520 的回复:
sort -n -r file.txt -o file.txt
感谢您的答案,这个确实可以,但是我想知道为什么重定向命令会导致文件为空。
引用 2 楼 K346K346 的回复:
引用 1 楼 q3733353520 的回复:
sort -n -r file.txt -o file.txt
感谢您的答案,这个确实可以,但是我想知道为什么重定向命令会导致文件为空。
感谢您的解答,这个有什么参考文献吗?
codingMozart 2017-03-10
  • 打赏
  • 举报
回复
这么说吧 open(file_right) clear(file_right) res = sort(file_left) write(res, file_right) 由于你的左右文件相同,所以在sort(file_left)时,file_left已经是空文件了,所以res是空的,写到right_file也是空的
codingMozart 2017-03-10
  • 打赏
  • 举报
回复
引用 5 楼 K346K346 的回复:
[quote=引用 3 楼 codingMozart 的回复:] > 在shell里大概是这样 打开文件 -> 清除原有内容 ->执行左边的程序 ->输出到该文件 所以排序的时候文件已经是空的了
按照您的理解,sort file>newfile,执行完毕后原文件file应该为空,但是并不为空![/quote] 是清空new file(如果newfile存在的话),不是清空file
恋喵大鲤鱼 2017-03-10
  • 打赏
  • 举报
回复
引用 3 楼 codingMozart 的回复:
> 在shell里大概是这样 打开文件 -> 清除原有内容 ->执行左边的程序 ->输出到该文件 所以排序的时候文件已经是空的了
按照您的理解,sort file>newfile,执行完毕后原文件file应该为空,但是并不为空!
  • 打赏
  • 举报
回复
引用 2 楼 K346K346 的回复:
引用 1 楼 q3733353520 的回复:
sort -n -r file.txt -o file.txt
感谢您的答案,这个确实可以,但是我想知道为什么重定向命令会导致文件为空。
具体原因我也不太清楚,但是>符号会先清空文件再写。>>才是追加到文件尾
codingMozart 2017-03-10
  • 打赏
  • 举报
回复
> 在shell里大概是这样 打开文件 -> 清除原有内容 ->执行左边的程序 ->输出到该文件 所以排序的时候文件已经是空的了
恋喵大鲤鱼 2017-03-10
  • 打赏
  • 举报
回复
引用 1 楼 q3733353520 的回复:
sort -n -r file.txt -o file.txt
感谢您的答案,这个确实可以,但是我想知道为什么重定向命令会导致文件为空。
  • 打赏
  • 举报
回复
sort -n -r file.txt -o file.txt
linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧