Redirecionamento (computação)

Em computação, redirecionamento é uma forma de comunicação entre processos e é uma função comum para a maioria dos interpretadores de linha de comando, incluindo os vários shells do Unix que podem redirecionar fluxos padrões para locais específicos de usuário.

Em sistemas operacionais do tipo Unix, programas realizam o redirecionamento com a chamada de sistema dup2(2), ou suas análogas menos flexíveis, porém de nível mais alto, stdio, freopen e popen.

Redirecionamento de entrada e saída padrão editar

Redirecionamento é normalmente implementado por meio da colocação de certos caracteres entre os comandos.

Redirecionamento básico editar

Normalmente, a sintaxe destes caracteres é da seguintes form.a, usando < para redirecionar a entrada e > para redirecionar a saída:

comando1 > arquivo1

Esta linha executa o comando1>/tt> colocando a saída em aquivo1, em vez de exibí-lo no terminal, que é o destino usual para a saída padrão. Isto apagará quaisquer dados existentes no arquivo1. Usando

comando1 < arquivo1

executa comando1 com arquivo1 como a fonte de entrada, em vez do teclado, que é a fonte usual da entrada padrão.

comando1 < arquivo_de_entrada > arquivo_de_saída

combina as duas funcionalidades: comando1 lê do arquivo_de_entrada e escreve em arquivo_de_saída.

Variantes editar

Para anexar a saída ao final do arquivo, em vez de apagá-lo, é utilizado o operador >>:

comando1 >> arquivo1

Par ler de um fluxo literal (um arquivo em linha, passado para a entrada padrão), pode-se usar um here document, usando o operador <<:

tr a-z A-Z << FIM_DO_TEXTO
um dois três
one two three
FIM_DO_TEXTO

Para ler a partir de uma cadeia de caracteres, pode-se usar uma here string, utilizando o operador <<<:

tr a-z A-Z <<< "um dois três"

ou:

NUMEROS="um dois três"
tr a-z A-Z <<< "$NUMEROS"

Redirecionamento para e a partir dos controles de arquivo padrões editar

Em shells Unix derivados do Bourne shell original, as primeiras duas ações podem ser posteriormente modificadas conlocando-se um número (o descritor de arquivo) imediatamente antes do caractere. Isto afetará qual fluxo é usado para o redirecionamento. Os fluxos padrões de E/S do Unix são:

Controle Nome Descrição
0 stdin Entrada padrão
1 stdout Saída padrão
2 stderr Erro padrão

Por exemplo:

comando1 2> arquivo1

executa comando1, direcionando o fluxo de erro padrão para arquivo1.

Em shells derivados do csh (o C shell), a sintaxe, em vez desta, anexa o caractere & (e comercial) aos caracteres de redirecionamento, alcançando um resultado similar. A razão para isto é distinguir entre um arquio chamado '1' e a saída padrão, isto é, 'cat arquivo 2>1' vs 'car arquivo 2>&1'. No primeiro caso,, stderr é redirecionada para um arquivo chamado '1' e no segundo, stderr é redirecionada para a saída padrão.

Outra funcionalidade útil é redirecionar um controle de arquivo padrão para outro.[1] A variação mais popular é mesclar a saída de erro padrão na saída padrão, desta forma as mensagens de erro podem ser processadas junto com (ou alternativamente para) a saída usual. Exemplo:

find / -name .profile > resultados 2>&1

tentará encontrar todos os arquivos chamados .profile. Executado sem redirecionamento, ele emitirá avisos para stdout e erros (por exemplo, pela falta de privilégios para percorrer diretórios protegidos) para stderr. Se a saída padrão for direcionada para o arquivo resultados, as mensagens de erro aparecem no console. Para ver tanto os avisos quanto as mensagens de erro no arquivo resultados, deve-se mesclar stderr (controle 2) na stdout (controle 1) usando 2>&1.

Referências

  1. «Advanced Bash-Scripting Guide: Chapter 20. I/O Redirection». The Linux Documentation Project (TLDP) (em inglês). Consultado em 12 de dezembro de 2022 
  Este artigo sobre Unix é um esboço. Você pode ajudar a Wikipédia expandindo-o.