str*_*gee 32 sort unix-philosophy
UNIX 哲学说:做一件事并把它做好。制作处理文本的程序,因为这是一个通用接口。
该sort命令,至少是 GNU sort,可以-o选择输出到文件而不是stdout. 为什么说,sort foobar -o whatever当我可以的时候有用sort foobar > whatever?
kur*_*rtm 47
不仅仅是 GNU 排序有它。BSD 排序也有。至于为什么?
(我也觉得这是个好问题……)
来自手册页:“给出的参数是要使用的输出文件的名称,而不是标准输出。该文件可以与输入文件之一相同。”
您不能使用重定向转到同一个文件,输出重定向会擦除该文件。
为了进一步澄清,如果我想对文件进行排序并将排序结果放在同一个地方,我可能会考虑尝试sort < foo > foo. 除了输出重定向截断文件foo以准备接收输出。然后就没有什么可排序的了。没有“-o”的方法就是sort < foo > bar ; mv bar foo. 我认为该-o选项会执行类似的操作,而无需您担心。
Ant*_*hon 12
但是我同意你的看法,它不在 Unix 哲学之内。uniq没有这个选项(而sort没有一个-u即可)。
在我的 PDP-11 上,我使用了一个带有一个参数的小程序:
renac whatever
Run Code Online (Sandbox Code Playgroud)
如果whatever已经存在,它会将所有内容从 stdin 写入一个临时文件,该文件仅whatever在 stdin 输入枯竭后才被重命名。这样您就可以将任何命令的输出通过管道renac传输到而不是重定向到文件名而不会覆盖输入。以这种方式解决覆盖问题恕我直言更符合Unix哲学。
一些后来对程序的添加是:如果标准输入上没有任何内容(例如,命令行输入错误的结果),则不覆盖输出文件,并允许将标准输入附加到命名文件的选项。
这是我制作的第一个(如果不是第一个)真正的 C 程序之一(对于我的工作,我主要在该系统上用 Pascal 开发)。