为什么 sort -o 有用?

为什么 sort -o 有用?

UNIX 哲学说:做一件事并把它做好。编写处理文本的程序,因为这是一个通用界面。

sort命令(至少是 GNU sort)可以-o选择输出到文件而不是stdout.比如说,sort foobar -o whatever当我可以的时候为什么有用sort foobar > whatever

答案1

不仅仅是 GNU 类拥有它。 BSD 排序也有它。至于为什么?
(我也觉得这个问题问得好……)

从手册页来看:“给出的参数是要使用的输出文件的名称,而不是标准输出。该文件可以与输入文件之一相同。”

您无法通过重定向转到同一文件,输出重定向会擦除该文件。

为了进一步澄清,如果我想对文件进行排序并将排序后的结果放在同一个地方,我可能会考虑尝试sort < foo > foo。除了输出重定向会截断文件foo以准备接收输出。然后就没有什么可以排序的了。如果没有“-o”,这样做的方法是sort < foo > bar ; mv bar foo。我认为该-o选项会执行类似的操作,而无需您担心。

答案2

'-o' 选项已经sortUnix 第六版

不过我同意你的观点,它不属于 Unix 哲学。uniq没有那个选项(并且sort没有-u然后)。

在我的 PDP-11 上,我使用了一个带有一个参数的小程序:

renac whatever

如果whatever已经存在,它会将 stdin 中的所有内容写入临时文件,该文件仅whatever在 stdin 输入枯竭后才重命名。这样您就可以将任何命令的输出通过管道传输到renac而不是重定向到文件名,而不会覆盖输入。以这种方式解决覆盖问题恕我直言更符合Unix哲学。

后来对该程序的一些补充是:如果标准输入上没有任何内容(例如,由于命令行部分输入错误而导致),则不覆盖输出文件,并允许将标准输入附加到指定文件的选项。

这是我制作的第一个(如果不是第一个)真正的 C 程序(对于我的工作,我主要在该系统上使用 Pascal 开发)。

相关内容