Skip to content

henriquedcmonteiro/Stdin_stdou_stderr_heredocs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

STREAMS

Passo 1 - STANDARD INPUT (STDIN).

- Geralmente STDIN é a entrada de dados pelas teclas do teclado, mas também pode ser reconhecido por "0<" ou apenas "<" que pode ser utilizado para passar arquivos como input ao invés da entrada padrão.

Passo 1

- Na prática é como se tivéssemos utilizado o comando "cat números", mas neste exemplo utilizamos o arquivo números como input para o cat.

Passo 2

- Podemos utilizar outros comandos que esperam um input como por exemplo, sort.

Passo 3

- O fluxo pode ser continuado com outras estruturas de saída, como pipe. No exemplo ordenando os números e não mostrando repetições.

Passo 2 - STANDARD OUTPUT (STDOUT).

- Podemos identificar STDOUT como a saída bem sucedida, também identificada pelos comandos "1>" ou ">", onde através de um input direcionamos ele com o objetivo de uma saída bem sucedida.

Passo 3_1

- STDOUT difere do STDERR que falaremos mais a frente, para reconhecer uma saída bem sucedida fora de um script podemos utilizar o comando "echo $?" logo em sequência de um comando.

Passo 5

- Quando a saída do comando "echo $? for "0" mostra que o comando foi bem sucedido, sendo uma STDOUT. Qualquer número diferente do 0 é uma saída de erro (STDERR).

- Observe que usamos > para sobrescrever um arquivo e >> para adicionar algo uma linha abaixo do arquivo direcionado.

Passo 6

- Neste exemplo a primeira vez que utilizamos o comando cat no arquivo saida.txt o nosso output é abcd.

- Pode-se notar que utilizando o ">" com os valores 123 nós sobrescrevemos o conteúdo anterior do arquivo e sua nova saída com o cat é "123".

- Já utilizando ">>" com o conteúdo "abcd", podemos ver que adicionamos esse novo texto abaixo do último conteúdo existente no arquivo saida.txt.

- Sua nova saída fica:
123
abcd

Passo 3 - STANDARD ERROR (STDERR).

Qualquer saída que resulte em um erro é considerado um STDERR.

Passo 7

- No primeiro comando "ls" temos uma saída bem sucedida, mostrando os arquivos no diretório que estamos.

- Agora no nosso segundo comando utilizamos a flag "-j", que não existe, nos dando uma saída de erro.

Passo 8

- Utilizamos o 2> para redirecionar a saída de erro para um arquivo. Da mesma forma que a STDOUT, podemos usar 2> e 2>>, para sobrescrever e adicionar respectivamente..

Passo 4 - REDIRECIONANDO SAÍDAS.

- No exemplo a seguir criei um simples script com o seguinte conteúdo:

echo "Hello"
ls -j

- Ao executa-lo teremos ambas as saídas, STDOUT e STDERR.

Passo 9

- Se tentarmos redirecionar a saída como STDOUT para um arquivo, teríamos um problema.

Passo 10

- Perceba que ao direcionar a saída do script para o arquivo saida.txt ainda continuamos com o erro em questão como output do comando, e ao utilizar o cat no arquivo saida.txt notamos que apenas a saída bem sucedida foi salva dentro dele.

Passo 11

- Podemos ter o resultado oposto utilizando uma saída STDERR "2>", agora o conteúdo de uma saída de erro foi salvo no arquivo saidaerr.txt e a saída bem sucedida apareceu no terminal sendo a string "Hello".

- Mas como podemos salvar ambas as saídas em um arquivo só, ou melhor salvar cada saída em seu respectitivo tipo.

- Podemos utilizar a lógica a seguir.

Passo 12

- Caso queira salvar ambas as saídas em um arquivo só utilizamos a seguinte estrutura: "./script.sh > saida_e_saidaerr.txt, onde direciona-se o conteúdo da saída bem sucedida para o arquivo em questão e ao final da sintaxe eu estou pedindo para que a saída de erro também seja direcionada para a saída bem sucedida com o comando 2>&1."

- Desta forma com o comando cat podemos ver que salvamos os dois tipos de saída em um arquivo só.

Passo 13

- Utilizando > e 2> podemos direcionar cada tipo de saída para um determinado arquivo como no exemplo acima.

Passo 5 - HEREDOCS.

- Existem situações em que precisamos escrever scripts simples contendo mais de uma linha sem precisar acessar um editor de texto, podemos para isso utilizar o HereDocs.

Passo 14

- Esta seria uma não usual de inserir linha após linha dentro de um arquivo através do append.

Passo 15

- Utilizando o HereDocs isso fica bem mais simples e dinâmico. Sua estrutura é simples.

Consegue-se digitar múltiplas linhas utilizando o <<, seguido de uma palavra-chave para determinar o começo e fim do comando. Utilizamos a palavra EOF que vem dos primórdios da computação, que significa End of file.

- Agora vamos entender a funcionalidade desse comando, note que todo o input do "<<" é destinado para o comando cat que por sua vez é direcionado como uma saída padrão para o arquivo texto_heredocs.

- Utilizando o comando cat texto_heredocs podemos ver que todo o texto foi inserido no arquivo através desse fluxo.

About

Using stdin, stdout, stderr and heredocs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published