Почему sort -o полезен?

Почему sort -o полезен?

Философия UNIX гласит: делай одно дело и делай его хорошо. Создавай программы, которые обрабатывают текст, потому что это универсальный интерфейс.

Команда sort, по крайней мере GNU sort, имеет -oопцию вывода в файл вместо stdout. Зачем, скажем, sort foobar -o whateverполезно, когда я мог бы просто sort foobar > whatever?

решение1

Это не только в GNU sort есть. В BSD sort тоже есть. А почему?
(Я тоже подумал, что это хороший вопрос...)

Из страницы руководства: «Указанный аргумент — это имя выходного файла, который будет использоваться вместо стандартного вывода. Этот файл может совпадать с одним из входных файлов».

Вы не можете перейти к тому же файлу с помощью перенаправления, перенаправление вывода стирает файл.

Для дальнейшего разъяснения, если бы я хотел отсортировать файл и поместить отсортированные результаты в то же место, я мог бы попробовать sort < foo > foo. За исключением того, что перенаправление вывода обрезает файл fooпри подготовке к получению вывода. И тогда нечего сортировать. Без "-o" способ сделать это был бы sort < foo > bar ; mv bar foo. Я предполагаю, что -oопция делает что-то похожее, не заставляя вас беспокоиться об этом.

решение2

Опция '-o' уже была sortвШестое издание Unix

Однако я согласен с вами, что это не соответствует философии Unix. У меня uniqне было такой возможности (и sortне было -uтогда).

На моем PDP-11 я использовал небольшую программу, которая принимала один параметр:

renac whatever

Если бы whateverон уже существовал, он бы записывал все из stdin во временный файл, который переименовывался бы только whateverпосле того, как ввод stdin иссякал. Таким образом, вы могли бы перенаправить вывод любой команды в renacвместо перенаправления на имя файла без возможности перезаписи ввода. Решение проблемы перезаписи таким способом, IMHO, больше соответствует философии Unix.

Более поздними дополнениями к программе стали: запрет на перезапись выходного файла, если на stdin ничего не поступило (например, в результате неправильного ввода части командной строки), а также предоставление возможности добавлять stdin к указанному файлу.

Это была одна из первых (если не первая) настоящих программ на языке C, которые я создал (для своей работы я в основном писал на языке Pascal в этой системе).

Связанный контент