Ouvi falar de "uso inútil de gato" e encontrei algumas sugestões, mas as seguintes não produzem nada no meu shell bash.
< filename
Usar o gato funciona como esperado.
cat filename
Estou usando o Fedora Core 18 e o GNU bash, versão 4.2.45 (1).
EDIT: Usá-lo na frente de um tubo também não funciona.
< filename | grep pattern
Considerando que o uso de gato funciona como esperado.
cat filename | grep pattern
EDIT2: Para esclarecer, eu sei que posso usar esse
grep pattern < filename
mas eu li aqui /programming/11710552/useless-use-of-cat que também posso usá-lo na frente do comando. Porém, ele não funciona na frente do comando.
bash
shell
io-redirection
cat
erro
fonte
fonte
Respostas:
O símbolo menor que e (
<
) está abrindo o arquivo e anexando-o ao identificador padrão do dispositivo de entrada de algum aplicativo / programa. Mas você não deu ao shell nenhum aplicativo para anexar a entrada.Exemplo
Estes 2 exemplos fazem essencialmente a mesma coisa, mas obtêm sua contribuição de duas maneiras ligeiramente diferentes.
abre arquivo
abre STDIN
Espreitar por trás da cortina
Você pode usar
strace
para ver o que está acontecendo.Quando lemos de um arquivo
Quando lemos do STDIN (identificado como 0)
No primeiro exemplo, podemos ver que
cat
abriu o arquivo e leu a partir deleblah.txt
. No segundo, podemos ver quecat
lê o conteúdo do arquivoblah.txt
através do descritor de arquivo STDIN, identificado como descritor número 0.fonte
cat
geralmente é mal compreendido e é usado quando não é necessário.< filename command
.O uso inútil clássico de
cat
é quando você o utiliza para dar entrada em programas perfeitamente capazes de abrir arquivos diretamente. Por exemplo:Mau
Boa
Também é bom (
<file
pode estar em ambos os lados do comando)fonte
cat
.cat
incluir (1)cat file
(com saída para a tela / terminal; embora, se o arquivo é maior do que a tela é alta, você pode preferir usarmore
ouless
ou algo parecido), (2)cat file1 file2 file3 > all_data
( exatamente para quecat
serve), (3)cat f1 f2 f3 | tr …
(ou canalize para qualquer outro programa para o qual você não queira passar os arquivos diretamente; por exemplo,wc
(por exemplo, se você quiser ver apenas o total geral) ougrep
(por exemplo, se você tem uma versão antiga que não suporta-h
, por exemplo,--no-filename
)),… (continua)cat -n file | sort … -k1 | sed 's/^ *[0-9]*\t//'
, (5)sudo cat file600 | untrusted_program
(ou seja, você (seu UID) não pode ler o arquivo e não deseja executar o programa como root ou mesmo qualquer UID semi-privilegiado). Além disso, ( e ) (ou seja, um número entre 2 e 3)program_that_generates_html | cat static_html_header - static_html_footer
(que você provavelmente desejaria redirecionar para um arquivo ou canal).O UUOC está em:
ou
Lá,
some-cmd
está lendo o conteúdo desomefile
um tubo alimentado pelocat
qual ele o lêsomefile
.some-cmd
pode ler diretamente desomefile
(depois que o shell o abriu no stdin), não há necessidade decat
:ou
(os redirecionamentos podem aparecer em qualquer lugar em uma linha de comando simples).
fonte