Primeiro, cat
escreve na saída padrão, que não é necessariamente um terminal, mesmo que tenha cat
sido 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 cat
realmente 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 cat
seria elegível para o Useless Use of Cat Award , pois cat file | pipeline
(onde pipeline
está 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 cat
muito 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 cat
gastar ciclos inúteis, não deveria.
Se houver um programa null
que 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 main
função de uma linha pode fazer o trabalho), mas chamar cat
sem argumentos (ou cat -
se você quiser ser explícito) faz exatamente isso.
Se houvesse um nocat
programa 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 nocat
programa.
Depois de escrever o nocat
programa, 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 cat
programa real , eles acrescentaram alguns sinos e assobios, porque sempre o fazem. Mas a essência é que o aspecto de "concatenação" dos cat
custos realmente não exige nenhum esforço, nem para o programador nem para a máquina que o executa. O fato de que cat
subsume null
e nocat
explica a inexistência de tais programas. Evite usar cat
com 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 nocat
funcionalidade hipotética , chamando cat
com 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, cat
primeiro despeja o precedente arquivos válidos e depois reclama do arquivo inválido (pelo menos é assim que meu gato se comporta).