Primeiro, catescreve na saída padrão, que não é necessariamente um terminal, mesmo que tenha catsido digitado como parte de um comando em um shell interativo. Se você realmente precisa escrever algo no terminal, mesmo quando a saída padrão é redirecionada, isso não é tão fácil (você precisa especificar qual terminal e talvez não exista um se o comando for executado a partir de um script), embora um poderia (ab) usar a saída de erro padrão se o comando for apenas uma parte de um pipeline. Mas como você indicou que catrealmente faz o trabalho, suponho que não estava perguntando sobre essa situação.
Se o seu objetivo fosse enviar o que está escrito para a saída padrão em um pipeline, o uso catseria elegível para o Useless Use of Cat Award , pois cat file | pipeline(onde pipelineestá qualquer pipeline) pode ser feito com mais eficiência <file pipeline. Mas, novamente, pelas suas palavras deduzo que essa não era sua intenção.
Portanto, não está tão claro com o que você está se preocupando. Se você achar catmuito tempo para digitar, poderá definir um alias de um ou dois caracteres (ainda existem alguns desses nomes que permanecem sem uso no Unix padrão). Se, no entanto, você está preocupado com o fato de catgastar ciclos inúteis, não deveria.
Se houver um programa nullque não aceite argumentos e apenas copie a entrada padrão para a saída padrão (o objeto neutro para pipelines), você poderá fazer o que quiser <file null. Não existe um programa desse tipo, embora seja fácil escrever (um programa C com apenas uma mainfunção de uma linha pode fazer o trabalho), mas chamar catsem argumentos (ou cat -se você quiser ser explícito) faz exatamente isso.
Se houvesse um nocatprograma que recebesse exatamente um argumento de nome de arquivo, tentasse abrir o arquivo, o reclamasse se não puder e, caso contrário, continuasse copiando do arquivo para a saída padrão, isso seria exatamente o que você estava solicitando. É apenas um pouco mais difícil de escrever do que null, o trabalho principal é abrir o arquivo, testar e possivelmente reclamar (se você for meticuloso, também poderá incluir um teste de que existe exatamente um argumento e reclamar do contrário). Mas cat, novamente , agora fornecido com um único argumento, faz exatamente isso, portanto não há necessidade de nenhum nocatprograma.
Depois de escrever o nocatprograma, por que parar com um único argumento? Envolvendo o código em um loop não for(;*argp!=NULL;++argp)é realmente um esforço, adiciona no máximo algumas instruções da máquina ao binário e evita a necessidade de reclamar sobre um número errado de argumentos (o que poupa muito mais instruções). Voilà uma versão primitiva cat, concatenando arquivos. (Para ser honesto, você precisa ajustá-lo um pouco para que, sem argumentos, ele se comporte como null.)
Obviamente, no catprograma real , eles acrescentaram alguns sinos e assobios, porque sempre o fazem. Mas a essência é que o aspecto de "concatenação" dos catcustos realmente não exige nenhum esforço, nem para o programador nem para a máquina que o executa. O fato de que catsubsume nulle nocatexplica a inexistência de tais programas. Evite usar catcom um único argumento se o resultado entrar em um pipeline, mas se for usado apenas para exibir o conteúdo do arquivo no terminal, mesmo a página que eu vinculei admite que esse é um uso útil cat, portanto, não hesite.
Você pode testar o que caté realmente implementado por um loop simples em torno de uma nocatfuncionalidade hipotética , chamando catcom vários nomes de arquivos entre os quais um nome inválido, não na primeira posição: em vez de reclamar imediatamente que esse arquivo não existe, catprimeiro despeja o precedente arquivos válidos e depois reclama do arquivo inválido (pelo menos é assim que meu gato se comporta).