Redirecionamentos©2002 FABRICIO FERRARI

Os recursos de redirecionamento de entrada e saída (E/S) são úteis para redefinir as entradas e saídas padrão em outros descritores de arquivos definidos pelo usuário. A tabela [*] mostra a função dos operadores de redirecionamento para os dois principais tipo de shells.


Tabela 3.1: Os operadores de redireção de E/S.
bash/ksh
tcsh
ação
$ <$ $ \langle$arquivo$ \rangle$ considera $ \langle$arquivo$ \rangle$ como stdin
$ >$ $ \langle$arquivo$ \rangle$ coloca a stdout no novo $ \langle$arquivo$ \rangle$
$ >>$ $ \langle$arquivo$ \rangle$ anexa stdout ao $ \langle$arquivo$ \rangle$ (ou cria-o)
$ <<$ $ \langle$delim$ \rangle$ toma como stdin até encontrar $ \langle$delim$ \rangle$
$ 2>\&1$ $ >\&$ reúne stdout com stderr
$ 2>>\&1$ $ >>\&$ anexa stderr a stdout
$ >!$ $ \langle$arquivo$ \rangle$ sobrescreve stdout em $ \langle$arquivo$ \rangle$
$ 2>\&1\vert$ $ \vert\&$ reúne stderr e stdout no duto


Por exemplo, para criar um arquivo com a lista dos arquivos de um diretório, faríamos:

$ ls -l $ >$ lista_de_arquivos

se lista_de_arquivos já existisse, poderíamos sobreescrevê-lo[*]

$ ls -l $ >!$ lista_de_arquivos

ou acrescentar a nova listagem ao final do arquivo

$ ls -l $ >>$ lista_de_arquivos.

Em todos estes exemplos, ao invés de colocar a saída padrão na tela, todo o seu conteúdo vai para outros arquivos, isto é, estamos redefinindo a saída padrão. A operação análoga pode ser feita com a entrada padrão. Por exemplo, na situação em que quiséssemos mandar um arquivo como conteúdo de uma mensagem de correio eletrônico, simplesmente faríamos:

$ mail $ \langle$endereço$ \rangle$ $ <$ $ \langle$mensagem$ \rangle$

Por fim, podemos reunir ambos conceitos numa mesma situação em que determinado programa lê seus parâmetros iniciais de um arquivo e grava-os em outro. Para ordenar os nomes dentro de um dado arquivo e gravá-los em outro, simplesmente diríamos:

$ sort $ <$ fora_de_ordem $ >$ ordenados

Neste caso, como em muitos dos aplicativos UNIX, é suposto que o primeiro argumento trata-se da entrada padrão, de forma que poderíamos omitir o sinal de $ <$. Outra aplicação dos redirecionadores é criar um arquivo usando o comando cat[*] simplesmente escrevendo

$ cat > astros
mercurio
venus
terra
marte
jupiter
\fbox{\sf Ctrl}+ \fbox{\sf d}
Aqui o cat imprimirá a entrada padrão, que como não foi especificada permanece sendo o teclado, na saída padrão, que agora é o arquivo astros. Então podemos entrar a lista de planetas até que \fbox{\sf Ctrl}+ \fbox{\sf d} (caracter de fim de arquivo - EOF) seja pressionado. Neste momento, o cat grava o nome dos planetas no arquivo.

O recurso dos delimitadores também é util quando o argumento de entrada tem mais de uma linha. Neste exemplo usamos os comando cat, que serve para imprimir a entrada padrão na saída padrão sem qualquer formatação, para imprimir as seguintes linhas

$ cat « ATE_AQUI
primeira linha
segunda
terceira
ATE_AQUI

imprimirá

primeira linha
segunda
terceira
na saída padrão.

leon 2008-08-19