Programas que servem para atuar como filtros de fluxo , pegando dados de alguma fonte de entrada e processando-os progressivamente e produzindo saída, normalmente lidos da entrada padrão quando invocados sem argumentos não-opcionais. Portanto, por exemplo, cat
, tail
, etc. são lidos a partir da entrada padrão por padrão. Ferramentas como grep
, sed
, etc. requerem um operando (o regexp para grep, o script para sed) e lidas da entrada padrão se esse for o único operando. Vi (m) não se encaixa neste molde: é um programa interativo, não um filtro de fluxo, então ele inicia no modo interativo quando você não passa nenhum argumento.
file
é uma exceção: ele não lê de stdin a menos que stdin seja dado como um argumento (possivelmente através da sintaxe -
). Não sei por que nem o autor original nem o comitê POSIX decidiram que não leria de stdin. Isso pode ocorrer porque file
não se importa apenas com o conteúdo do arquivo, mas também com os tipos de arquivo - file foo
informa se foo
é um diretório, um arquivo regular, um link simbólico etc. filtrar como os outros, embora seja geralmente usado como tal. Está na metade do caminho entre grep
(um filtro de fluxo) e ls
(que se preocupa apenas com o arquivo como uma entrada de diretório e não com o conteúdo do arquivo).
( grep -r
também se importa com os tipos de arquivo, mas essa é uma adição que veio muito depois do comando original).