O que significa seguir cat commnad no Unix?

0

O que significa seguir cat commnad no Unix? Eu sou novo no Unix

cat test.txt | java myfilegrammar.pcfg > test1.txt 2> test2.txt
    
por Harshit 23.03.2010 / 04:57

7 respostas

3

Ele canaliza o conteúdo de test.txt para a entrada de java myfile.java grammar.pcfg e, em seguida, redireciona o fluxo de saída do comando java para test1.txt e seu fluxo de erro para test2.txt .

Você pode achar um pouco mais fácil entender se ele é entre parênteses, como este (note que isso é para clareza e não é uma sintaxe válida):

(cat test.txt | java myfile.java grammar.pcfg) > test1.txt 2> test2.txt

Isso deixa mais claro que o primeiro arquivo de texto é um arquivo de entrada, enquanto os dois últimos são arquivos de saída.

(No entanto, o java myfile.java pouco realmente não faz sentido para mim - java é chamado nos arquivos .class, não nos arquivos .java.)

    
por 23.03.2010 / 05:00
4

Randal L. Schwartz concederia ao seu código um uso inútil do prêmio cat . Para obter mais informações sobre como alguém ganha esse prêmio e como ele pode ser evitado, consulte o link . Vou apenas citar a carta de Randal L. Schwartz para a posteridade.

And of course, if you've been following along for a week or two, you know that this (BING!) is a Useless Use of Cat!

Rememeber, nearly all cases where you have:

    cat file | some_command and its args ...

you can rewrite it as:

    <file some_command and its args ...

and in some cases, such as this one, you can move the filename to the arglist as in:

    some_command and its args ... file

Just another Useless Use of Usenet,

(Não, eu não estou tentando ser um insulto; apenas divertido. Se você seguir os links, sua pergunta será respondida.)

    
por 23.03.2010 / 05:15
1
  1. Envie o conteúdo de test.txt para a entrada padrão de um processo iniciado usando java como executável com os argumentos "myfile.java grammar.pcfg"
  2. Mapeie a saída padrão da execução do java para test1.txt
  3. Mapeie o fluxo de erros para test2.txt
por 23.03.2010 / 05:01
1

Seu programa java lê a entrada de stdin e a entrada que você deseja fornecer está no arquivo test.txt . A maneira de fornecer essas entradas é colocar o conteúdo do arquivo text.txt em stdout e pipe no arquivo stdin do programa java .

O mesmo pode ser feito sem usar cat como:

java myfile.java grammar.pcfg > test1.txt 2> test2.txt < test.txt 
    
por 23.03.2010 / 05:02
1

Cada processo no Linux começa com três descritores de arquivos por padrão:

  • 0 - > Entrada Padrão
  • 1 - > Saída Padrão
  • 2 - > Erro padrão

Se você vir um redirecionamento, ou seja, fd_number > some_file.txt , isso indica que o que normalmente seria impresso no arquivo que contém o descritor de arquivo fd_number agora será redirecionado para o que vier depois dele.

O comando que você deu também pode ser escrito como:

cat test.txt | java myfile.java grammar.pcfg 1> test1.txt 2> test2.txt

Ou:

java myfile.java grammar.pcfg 0< test.txt 1> test1.txt 2> test2.txt

... dependendo de como o myfile.java lida com a entrada padrão.

    
por 23.03.2010 / 05:12
0

envia o conteúdo do test.txt para "myfile.java grammar.pcfg" via entrada padrão. envie a saída padrão de myfile.java grammar.pcfg para test1.txt envie a saída de erro padrão de myfile.java grammar.pcfg para test2.txt

    
por 23.03.2010 / 05:01
0

é o mesmo que

java myfile.java grammar.pcfg > test1.txt 2> test2.txt < test.txt

mas com processo adicional ( cat ) que lê os dados do test.txt e os imprime na saída padrão (que está sendo redirecionada pelo canal | para a entrada padrão de java )

    
por 23.03.2010 / 05:07

Tags