¿Por qué es útil ordenar -o?

¿Por qué es útil ordenar -o?

La filosofía UNIX dice: haz una cosa y hazla bien. Haga programas que manejen texto, porque esa es una interfaz universal.

El sortcomando, al menos tipo GNU, tiene una -oopción para generar un archivo en lugar de stdout. ¿Por qué es, digamos, sort foobar -o whateverútil cuando podría simplemente sort foobar > whatever?

Respuesta1

No es sólo el tipo GNU el que lo tiene. El tipo BSD también lo tiene. ¿Y por qué?
(Pensé que era una buena pregunta también...)

Desde la página de manual: "El argumento proporcionado es el nombre de un archivo de salida que se utilizará en lugar de la salida estándar. Este archivo puede ser el mismo que uno de los archivos de entrada".

No puede ir al mismo archivo con la redirección, la redirección de salida borra el archivo.

Para aclarar aún más, si quisiera ordenar un archivo y colocar los resultados ordenados en el mismo lugar, podría pensar en intentarlo sort < foo > foo. Excepto que la redirección de salida trunca el archivo fooen preparación para recibir la salida. Y luego no hay nada que ordenar. Sin "-o" la forma de hacerlo sería sort < foo > bar ; mv bar foo. Supongo que la -oopción hace algo similar sin que tengas que preocuparte por ello.

Respuesta2

La opción '-o' ya estaba en elsort delSexta edición de Unix

Sin embargo estoy de acuerdo contigo en que no está dentro de la filosofía Unix. uniqNo tenía esa opción (y sortno tenía -uentonces).

En mi PDP-11 utilicé un pequeño programa que tomaría un parámetro:

renac whatever

Si whateverya existiera, escribiría todo, desde la entrada estándar a un archivo temporal, al que solo se le cambiaría el nombre whateverdespués de que se agotara la entrada estándar. De esa manera, podría canalizar la salida de cualquier comando renacen lugar de redirigir al nombre del archivo sin posibilidad de sobrescribir la entrada. Resolver el problema de sobrescritura de esa manera es, en mi humilde opinión, más conforme con la filosofía Unix.

Algunas adiciones posteriores al programa fueron: no sobrescribir el archivo de salida si no había llegado nada a la entrada estándar (por ejemplo, como resultado de escribir mal parte de la línea de comando) y permitir una opción para agregar la entrada estándar al archivo nombrado.

Este fue uno de los primeros (si no el primero) programas reales en C que hice (para mi trabajo desarrollé principalmente en Pascal en ese sistema).

información relacionada