La filosofía UNIX dice: haz una cosa y hazla bien. Haga programas que manejen texto, porque esa es una interfaz universal.
El sort
comando, al menos tipo GNU, tiene una -o
opció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 foo
en 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 -o
opció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. uniq
No tenía esa opción (y sort
no tenía -u
entonces).
En mi PDP-11 utilicé un pequeño programa que tomaría un parámetro:
renac whatever
Si whatever
ya existiera, escribiría todo, desde la entrada estándar a un archivo temporal, al que solo se le cambiaría el nombre whatever
después de que se agotara la entrada estándar. De esa manera, podría canalizar la salida de cualquier comando renac
en 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).