Primero, cat
escribe en la salida estándar, que no es necesariamente un terminal, incluso si cat
se escribió como parte de un comando en un shell interactivo. Si realmente necesita algo para escribir en el terminal, incluso cuando se redirige la salida estándar, eso no es tan fácil (necesita especificar qué terminal, y puede que ni siquiera haya uno si el comando se ejecuta desde un script), aunque uno podría (ab) usar la salida de error estándar si el comando es simplemente una parte de una tubería. Pero dado que usted indicó que cat
realmente hace el trabajo, supongo que no estaba preguntando sobre tal situación.
Si su propósito fuera enviar lo que está escrito a la salida estándar en una tubería, entonces el uso cat
sería elegible para el Premio de uso inútil de Cat , ya que cat file | pipeline
(donde se pipeline
encuentra cualquier tubería) se puede hacer de manera más eficiente <file pipeline
. Pero de nuevo, de su redacción deduzco que esta no era su intención.
Por lo tanto, no está tan claro de qué se preocupa. Si encuentra cat
demasiado tiempo para escribir, puede definir un alias de uno o dos caracteres (todavía hay algunos nombres que permanecen sin usar en Unix estándar). Sin embargo, si te preocupa cat
gastar ciclos inútiles, no deberías.
Si hubiera un programa null
que no toma argumentos y solo copia la entrada estándar a la salida estándar (el objeto neutral para las tuberías), puede hacer lo que quiera <file null
. No existe tal programa, aunque sería fácil de escribir (un programa en C con solo una función de una línea main
puede hacer el trabajo), pero llamar cat
sin argumentos (o cat -
si desea ser explícito) hace exactamente eso.
Si hubo un nocat
programa que toma exactamente un argumento de nombre de archivo, intenta abrir el archivo, se queja si no puede, y de lo contrario procede a copiar desde el archivo a la salida estándar, entonces eso sería justo lo que está pidiendo. Es solo un poco más difícil de escribir que null
, el trabajo principal es abrir el archivo, probar y posiblemente quejarse (si es meticuloso, también puede incluir una prueba de que exista exactamente un argumento, y quejarse de lo contrario). Pero nuevamente cat
, ahora provisto de un argumento único, hace exactamente eso, por lo que no hay necesidad de ningún nocat
programa.
Una vez que logró escribir el nocat
programa, ¿por qué detenerse en un solo argumento? Envolver el código en un bucle for(;*argp!=NULL;++argp)
realmente no es ningún esfuerzo, agrega como máximo un par de instrucciones de máquina al binario y evita tener que quejarse de un número incorrecto de argumentos (lo que ahorra muchas más instrucciones). Voilà una versión primitiva de cat
, concatenando archivos. (Para ser honesto, necesita ajustarlo un poco para que sin argumentos se comporte como null
).
Por supuesto, en el cat
programa real , agregaron algunas campanas y silbatos, porque siempre lo hacen. Pero la esencia es que el aspecto de "concatenación" de los cat
costos realmente no supone ningún esfuerzo, ni para el programador ni para la máquina que lo ejecuta. El hecho de que cat
subsume null
y nocat
explica la inexistencia de tales programas. Evite usar cat
con un solo argumento si el resultado entra en una tubería, pero si se usa solo para mostrar el contenido del archivo en el terminal, incluso la página a la que enlacé admite que este es un uso útil cat
, así que no lo dude.
Puede probar que cat
realmente se implementa mediante un bucle simple alrededor de una nocat
funcionalidad hipotética , llamando cat
con varios nombres de archivo entre los que se encuentra un nombre no válido, no en la primera posición: en lugar de quejarse de inmediato de que este archivo no existe, cat
primero se elimina el precedente archivos válidos, y luego se queja sobre el archivo no válido (al menos así es como se comporta mi gato).