Por que sort -o é útil?

Por que sort -o é útil?

A filosofia do UNIX diz: faça uma coisa e faça bem. Faça programas que manipulem texto, porque essa é uma interface universal.

O sortcomando, pelo menos GNU sort, tem uma -oopção de saída para um arquivo em vez de stdout. Por que é, digamos, sort foobar -o whateverútil quando eu poderia simplesmente sort foobar > whatever?

Responder1

Não é apenas o tipo GNU que o possui. O tipo BSD também tem. E por quê?
(Achei que era uma boa pergunta também...)

Na página de manual: "O argumento fornecido é o nome de um arquivo de saída a ser usado em vez da saída padrão. Este arquivo pode ser igual a um dos arquivos de entrada."

Você não pode ir para o mesmo arquivo com redirecionamento, o redirecionamento de saída apaga o arquivo.

Para esclarecer ainda mais, se eu quisesse classificar um arquivo e colocar os resultados classificados no mesmo lugar, talvez eu tentasse sort < foo > foo. Exceto que o redirecionamento de saída trunca o arquivo foona preparação para receber a saída. E então não há nada para resolver. Sem "-o" a maneira de fazer isso seria sort < foo > bar ; mv bar foo. Presumo que a -oopção faça algo semelhante sem que você precise se preocupar com isso.

Responder2

A opção '-o' já estava no final sortdoSexta Edição do Unix

No entanto, concordo com você que isso não faz parte da filosofia Unix. uniqnão tinha essa opção (e sortnão tinha -uentão).

No meu PDP-11 usei um pequeno programa que levaria um parâmetro:

renac whatever

Se whateverjá existisse, ele gravaria tudo, desde stdin em um arquivo temporário, que só foi renomeado whateverdepois que a entrada stdin secou. Dessa forma, você poderia canalizar a saída de qualquer comando renacem vez de redirecionar para o nome do arquivo sem a chance de sobrescrever a entrada. Resolver o problema de substituição dessa forma é IMHO mais conforme à filosofia Unix.

Algumas adições posteriores ao programa foram: não sobrescrever o arquivo de saída se nada tivesse chegado ao stdin (por exemplo, resultado de digitação incorreta de parte da linha de comando) e permitir uma opção para anexar stdin ao arquivo nomeado.

Este foi um dos primeiros (se não o primeiro) programas C reais que fiz (para o meu trabalho desenvolvi principalmente em Pascal naquele sistema).

informação relacionada