Tout d'abord, catécrit sur la sortie standard, qui n'est pas nécessairement un terminal, même s'il a catété tapé dans le cadre d'une commande dans un shell interactif. Si vous avez vraiment besoin de quelque chose à écrire sur le terminal même lorsque la sortie standard est redirigée, ce n'est pas si facile (vous devez spécifier quel terminal, et il pourrait même ne pas y en avoir un si la commande est exécutée à partir d'un script), même si un pourrait (ab) utiliser la sortie d'erreur standard si la commande fait simplement partie d'un pipeline. Mais puisque vous avez indiqué que cela catfait vraiment l'affaire, je suppose que vous ne posiez pas de question sur une telle situation.
Si votre objectif était d'envoyer ce qui est écrit sur la sortie standard dans un pipeline, alors l'utilisation catserait éligible au prix Useless Use of Cat , car cat file | pipeline(où pipelinesignifie n'importe quel pipeline) peut être fait plus efficacement <file pipeline. Mais encore une fois, de votre formulation, je déduis que ce n'était pas votre intention.
Il n'est donc pas si clair de quoi vous vous inquiétez. Si vous trouvez cattrop de temps pour taper, vous pouvez définir un alias à un ou deux caractères (il y a encore quelques noms de ce type qui restent inutilisés dans Unix standard). Si toutefois vous vous inquiétez de catpasser des cycles inutiles, vous ne devriez pas.
S'il y avait un programme nullqui ne prend aucun argument et copie simplement l'entrée standard vers la sortie standard (l'objet neutre pour les pipelines), vous pouvez faire ce que vous voulez <file null. Il n'y a pas un tel programme, bien qu'il soit facile d'écrire (un programme C avec juste une fonction d'une ligne mainpeut faire le travail), mais appeler catsans arguments (ou cat -si vous voulez être explicite) fait exactement cela.
S'il y avait un nocatprogramme qui prend exactement un argument de nom de fichier, essaie d'ouvrir le fichier, se plaint s'il ne peut pas, et sinon procède à la copie du fichier vers la sortie standard, alors ce serait exactement ce que vous demandez. Il n'est que légèrement plus difficile à écrire que null, le travail principal étant d'ouvrir le fichier, de tester et éventuellement de se plaindre (si vous êtes méticuleux, vous voudrez peut-être également inclure un test indiquant qu'il existe un seul argument et vous plaindre du contraire). Mais encore une fois cat, maintenant fourni avec un seul argument, fait exactement cela, donc il n'y a pas besoin de nocatprogramme.
Une fois que vous avez réussi à écrire le nocatprogramme, pourquoi s'arrêter à un seul argument? Envelopper le code dans une boucle for(;*argp!=NULL;++argp)n'est vraiment pas du tout un effort, ajoute tout au plus quelques instructions machine au binaire, et évite d'avoir à se plaindre d'un nombre incorrect d'arguments (ce qui épargne beaucoup plus d'instructions). Voilà une version primitive de catconcaténation de fichiers. (Pour être honnête, vous devez le modifier un peu afin que, sans arguments, il se comporte comme null.)
Bien sûr, dans le vrai catprogramme, ils ont ajouté quelques cloches et sifflets, car ils le font toujours. Mais l'essentiel est que l'aspect "concaténation" des catcoûts ne demande vraiment aucun effort, ni pour le programmeur ni pour la machine qui l'exécute. Le fait que catsubsume nullet nocatexplique la non-existence de tels programmes. Évitez d'utiliser catavec un seul argument si le résultat va dans un pipeline, mais s'il est utilisé uniquement pour afficher le contenu du fichier sur le terminal, même la page à laquelle je suis lié admet qu'il s'agit d'une utilisation utile cat, alors n'hésitez pas.
Vous pouvez tester ce qui catest vraiment implémenté par une simple boucle autour d'une nocatfonctionnalité hypothétique , en appelant catavec plusieurs noms de fichiers parmi lesquels un nom invalide, pas en première position: plutôt que de vous plaindre tout de suite que ce fichier n'existe pas, catvide d'abord le précédent des fichiers valides, puis se plaint du fichier invalide (du moins c'est ainsi que mon chat se comporte).