Redirecionamento no Shell

Publicado por yros aguiar em 10/11/2010

[ Hits: 58.549 ]

 


Redirecionamento no Shell



Toda saída gerada por um comando no bash (shell) é direcionada para o output padrão, no caso o terminal, podemos trabalhar com a saída do comando direcionado-a para outro comando ou não direcionando para nem um local (null), entre outras opções.

O pipe ( | ) e o comando tee são utilizados para agregarmos comandos no shell, o > ou < e >> ou << são utilizados para enviarmos a saída do comando para um outro arquivo ou dispositivo ou para pegarmos a saída gerada por um arquivo e defini-la como entrada para um comando, considerando que no Linux os dispositivos também são vistos como arquivos.

Abaixo segue uma breve descrição de cada parâmetro utilizado para redirecionamento.

Redirecionamentos de saída:

>

Exemplo:

ls > arquivosdodiretorio

No exemplo acima a saída do comando ls, que serve para listar os arquivos e pastas do diretório, será direcionada para o arquivo arquivosdodiretorio, e se este arquivo já existir será sobrescrito.

Outro exemplo:

ls >> arquivosdodiretorio

No comando acima a saída do comando ls, que serve para listar os arquivos e pastas do diretório, será direcionada para o arquivo arquivosdodiretorio, e se este arquivo já existir, a saída do comando será adicionada ao fim do arquivo.

2>

Redireciona os erros gerados pelo comando para um arquivo especificado e mesmo que não ocorram erros no comando, o arquivo é criado.

Exemplo:

ls arquivoquenaoexiste 2> erros
ou
ls arquivoquenaoexiste 2> /dev/null

No primeiro exemplo a saída do comando ls rá gerar um erro, pois não existe o arquivo especificado, este será enviado para o arquivo erros, se este arquivo não existir o arquivo será criado, mesmo que não haja erros.

No segundo exemplo os erros gerados serão direcionados para /dev/null,que é a mesma coisa de enviar para a terra do nunca ou para um buraco negro.

Redirecionamentos de entrada:

<

Avisa ao shell que a entrada padrão não será o teclado e sim o arquivo especificado.

Exemplo:

mail < conteudodoemail

No exemplo acima especificamos que o email, no caso o corpo do email a ser enviado, é o conteúdo do arquivo conteudodoemail.

<<

Serve para indicar ao shell que um comando inicia na linha seguinte e termina quando encontrar uma linha que tenha <<.

Exemplo:

mail yros@yros.com.br << fim

No exemplo acima especificamos que o fim do email que será enviado para yros@yros.com.br será quando eu digitar fim.

Redirecionamentos especiais:

| (pipe)

Este é o pipe, serve para enviar a saída de um comando para a entrada de outro, muito utilizado e de grande importância para o GNU.

Exemplo:

Queria saber se no dia 3 de outubro o usuário yros logou no servidor.

last yros | grep "oct 3"

No caso acima utilizo o comando last, que mostra as últimas sessões feitas ao servidor pelo usuário que digitei como parâmetro, no caso yros, a saída deste comando eu direcionei utilizando o pipe para o comando grep, que captura a saída padrão e filtra o conteúdo que determinarmos.

Podemos utilizar o pipe quantas vezes quisermos no mesmo comando, apenas temos que tomar cuidado com saída e a entrada para não conter erros na sintaxe.

Exemplo:

Quantas vezes o usuário yros logou no dia 3 de outubro?

last yros | grep "oct 3" | wc -l

No caso o "last yros" passará para o grep todas as vezes que o usuário logou, o grep filtrará e mostrará apenas as vezes que ele logou no dia 3 de outubro e o wc -l pegará a saída do grep e contará as linhas que o comando grep gerou.

tee

Serve para redirecionar um comando com um pipe para outro comando, saída padrão e um arquivo.

last yros | tee grep "oct 3" > log

Utilizando o mesmo comando acima no exemplo, a saída será gerada no terminal e também será gerada no arquivo log.

Outras dicas deste autor

Utilizando o NMAP

Configurando RIP v2 em roteadores CISCO

Convertendo arquivo de vídeo ogv para flv

Leitura recomendada

Ações condicionais no SED

Introdução ao awk

Múltiplas expressões no SED

Expressão regular para validar um IP

Leitor de arquivos ePub

  

Comentários
[1] Comentário enviado por tiglinux em 21/05/2014 - 19:43h

estou fazendo no terminal aqui o seguinte comando :

vdir > saida.txt 2> erro.txt

e depois :

ls | grep txt


Com isso foi criado 2 arquivos .txt e o arquivo " saida.txt " aparece :

total 35
-rw-r--r--+ 1 Aluno mkpasswd 0 abr 23 21:30 arqnovo
-rwxr-xr-x+ 1 Aluno mkpasswd 264 mar 19 19:48 cadastro.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 1806 mar 19 20:02 calculadora.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 550 mar 19 20:08 case.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 209 abr 2 20:15 correio.sh
-rw-r--r--+ 1 Aluno mkpasswd 0 mai 21 19:42 erro.txt
----------+ 1 Aluno mkpasswd 181 abr 9 19:12 Hora.sh
-rw-r--r--+ 1 Aluno mkpasswd 0 abr 23 20:27 ls
-rw-r--r--+ 1 Aluno mkpasswd 22 abr 23 22:04 meuteste
-rw-r--r--+ 1 Aluno mkpasswd 70 abr 9 19:47 ola.sh
drwxr-xr-x+ 1 Aluno mkpasswd 0 abr 9 19:41 pasta_destino
-rwxr-xr-x+ 1 Aluno mkpasswd 619 mar 19 22:12 pesquisa.sh
-rw-r--r--+ 1 Aluno mkpasswd 0 abr 23 22:06 programacao
-rwxr-xr-x+ 1 Aluno mkpasswd 85 abr 9 19:49 questao1.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 228 abr 9 19:44 questao2.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 254 abr 9 20:06 questao3.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 262 abr 9 20:23 questao4.sh
-rwxr-xr-x+ 1 Aluno mkpasswd 443 abr 9 21:06 questao5.sh

:)

[2] Comentário enviado por tiglinux em 21/05/2014 - 21:51h

Muito bom o tutorial me ajudou muito :)

[3] Comentário enviado por removido em 23/05/2023 - 20:03h

Primeiro parágrafo terceira linha, o certo é nenhum e não 'nem um' como colocado pelo yros. Espero que o comentário possa agregar ao excelente artigo.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts