<chapt id="redir">Redirecionamentos e Pipe
 <p>
Esta seção explica o funcionamento dos recursos de direcionamento de entrada 
e saída do sistema <prgn>GNU/Linux</prgn>. 


<sect id="redir-maior">&gt;
 <p>
Redireciona a saída padrão de um programa/comando/script para algum dispositivo ou 
arquivo ao invés do dispositivo de saída padrão (tela). 
<![ %DESCRICAOD [ Quando é usado com arquivos, este redirecionamento cria ou 
substitui o conteúdo do arquivo. ]]> 
 <p>
Por exemplo, você pode usar o comando <prgn>ls</prgn> para listar arquivos 
e usar <tt>ls &gt;listagem</tt> para enviar a saída do comando para o 
arquivo <file>listagem</file>. Use o comando <prgn>cat</prgn> para 
visualizar o conteúdo do arquivo <file>listagem</file>. 
 <p>
O mesmo comando pode ser redirecionado para o segundo console 
<file>/dev/tty2</file> usando: 
<tt>ls &gt;/dev/tty2</tt>, o resultado do comando <prgn>ls</prgn> será  
mostrado no segundo console (pressione <tt>ALT</tt> e <tt>F2</tt> para 
mudar para o segundo console e <tt>ALT</tt> e <tt>F1</tt> para retornar 
ao primeiro). O mesmo resultado pode ser obtido com o comando 
<tt>ls 1&gt;/dev/tty2</tt>, sendo que o número <tt>1</tt> indica que será 
capturada a saída padrão do comando.
 <p>
Para redirecionar somente a saída de erros do comando <prgn>ls</prgn>, use a 
sintaxe: <tt>ls 2&gt;/tmp/erros-do-ls</tt>

<sect id="redir-maior2">&gt;&gt;
 <p>
Redireciona a saída padrão de um programa/comando/script para algum 
dispositivo ou adiciona as linhas ao final de arquivo ao invés do dispositivo de 
saída padrão (tela). 
<![ %DESCRICAOD [ A diferença entre este redirecionamento duplo e o 
simples, é se caso for usado com arquivos, adiciona a saída do comando ao 
final do arquivo existente ao invés de substituir seu conteúdo. ]]>. 
 <p>
Por exemplo, você pode acrescentar a saída do comando <prgn>ls</prgn> 
ao arquivo <file>listagem</file> do capítulo anterior usando 
<tt>ls / &gt;&gt;listagem</tt>. Use o comando <prgn>cat</prgn> para 
visualizar o conteúdo do arquivo <file>listagem</file>. 


<sect id="redir-menor">&lt;
 <p>
Direciona a entrada padrão de arquivo/dispositivo para um comando. 
Este comando faz o contrário do anterior, ele envia dados ao comando. 
 <p>
Você pode usar o comando <tt>cat &lt;teste.txt</tt> para enviar o conteúdo 
do arquivo <file>teste.txt</file> ao comando <prgn>cat</prgn> que mostrará seu 
conteúdo (é claro que o mesmo resultado pode ser obtido com 
<tt>cat teste.txt</tt> mas este exemplo serviu para mostrar a 
funcionalidade do &lt;).


<sect id="redir-menor2">&lt;&lt;
 <p>
Este redirecionamento serve principalmente para marcar o fim de exibição de um 
bloco. Este é especialmente usado em conjunto com o comando <prgn>cat</prgn>, mas 
também tem outras aplicações. Por exemplo:
<example>
 cat &lt;&lt; final
este arquivo
será mostrado
até que a palavra final seja 
localizada no inicio da linha
final

</example>


<sect id="redir-pipe">| (pipe)
 <p>
Envia a saída de um comando para a entrada do próximo comando 
para continuidade do processamento. Os dados enviados são processados 
pelo próximo comando que mostrará o resultado do processamento.
 <p>
Por exemplo: <tt>ls -la | more</tt>, este comando faz a listagem longa de 
arquivos que é enviado ao comando <prgn>more</prgn> (que tem a função 
de efetuar uma pausa a cada 25 linhas do arquivo). 
 <p>
Outro exemplo é o comando <tt>locate find | grep "bin/"</tt>, neste comando 
todos os caminhos/arquivos que contém <em>find</em> na listagem serão 
mostrados (inclusive man pages, bibliotecas, etc.), então enviamos 
a saída deste comando para <tt>grep "bin/"</tt> para mostrar somente os 
diretórios que contém binários. Mesmo assim a listagem ocupe mais de uma 
tela, podemos acrescentar o <prgn>more</prgn>: 
<tt>locate find | grep "bin/" | more</tt>.
 <p>
Podem ser usados mais de um comando de redirecionamento (&lt;, &gt;, |) em 
um mesmo comando.


<sect>Diferença entre o "|" e o "&gt;"
 <p>
A principal diferença entre o "|" e o "&gt;", é que o Pipe envolve 
processamento entre comandos, ou seja, a saída de um comando é enviado  
a entrada do próximo e o "&gt;" redireciona a saída de um comando para  
um arquivo/dispositivo. 
 <p>
Você pode notar pelo exemplo acima (<tt>ls -la | more</tt>) que 
ambos <tt>ls</tt> e <tt>more</tt> são comandos porque estão separados 
por um "|". Se um deles não existir ou estiver digitado incorretamente, 
será mostrada uma mensagem de erro. 
 <p>
Um resultado diferente seria obtido usando um <tt>"&gt;"</tt> no lugar do 
<tt>"|"</tt>; A saída do comando <tt>ls -la &gt; more</tt> seria gravada em um 
arquivo chamado <file>more</file>. 


<sect id="redir-tee">tee
 <p>
Envia ao mesmo tempo o resultado do programa para a saída padrão (tela) 
e para um arquivo. Este comando deve ser usado com o pipe "|". 
 <p>
<tt><em>comando</em> |tee [<em>arquivo</em>]</tt>
<![ %EXEMPLO [
 <p>
Exemplo: <tt>ls -la | tee listagem.txt</tt>, a saída do comando 
será mostrada normalmente na tela e ao mesmo tempo gravada no arquivo 
<file>listagem.txt</file>. ]]>

