Primero, catescribe en la salida estándar, que no es necesariamente un terminal, incluso si catse 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 catrealmente 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 catsería elegible para el Premio de uso inútil de Cat , ya que cat file | pipeline(donde se pipelineencuentra 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 catdemasiado 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 catgastar ciclos inútiles, no deberías.
Si hubiera un programa nullque 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 mainpuede hacer el trabajo), pero llamar catsin argumentos (o cat -si desea ser explícito) hace exactamente eso.
Si hubo un nocatprograma 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 nocatprograma.
Una vez que logró escribir el nocatprograma, ¿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 catprograma real , agregaron algunas campanas y silbatos, porque siempre lo hacen. Pero la esencia es que el aspecto de "concatenación" de los catcostos realmente no supone ningún esfuerzo, ni para el programador ni para la máquina que lo ejecuta. El hecho de que catsubsume nully nocatexplica la inexistencia de tales programas. Evite usar catcon 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 catrealmente se implementa mediante un bucle simple alrededor de una nocatfuncionalidad hipotética , llamando catcon 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, catprimero 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).