Redirecionamento no Shell

Publicado por yros aguiar em 10/11/2010

[ Hits: 58.619 ]

 


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

Convertendo arquivo de vídeo ogv para flv

Configurando RIP v2 em roteadores CISCO

Utilizando o NMAP

Leitura recomendada

Como fazer "quit" no SED

Equação de 2° Grau Shell Script - Zenity

Extraindo seu endereço IP com shell script (egrep + awk)

Screen (janelas) no modo shell?

sed - Eliminando linhas em branco

  

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