Primeiro, qualquer coisa após > ou >> é um nome de arquivo; então > 1 grava em um arquivo chamado 1 .
Os números nos outros formulários fornecidos no seu exemplo são descritores de arquivos. Por padrão, os programas começam com os descritores de arquivo 0 (entrada padrão), 1 (saída padrão) e 2 (erro padrão) conectados; quando você inicia um programa a partir de um shell interativo, eles são conectados à entrada e à saída do terminal (você pode vê-los executando ls -l /proc/$$/fd no Linux).
Especificar um número antes de > , >> ou >& especifica o descritor de arquivo que você deseja manipular; o número deve estar bem na frente do símbolo > . Assim
echo Example 2> stderr
imprimirá "Exemplo" e criará um arquivo stderr vazio (que conterá qualquer coisa enviada para o erro padrão).
Você pode pensar em descritores de arquivos como entradas em uma tabela, apontando para arquivos; assim, por padrão:
- 0 pontos para
/dev/tty - 1 pontos para
/dev/tty - 2 pontos para
/dev/tty
Especificar 1> file (ou simplesmente > file ) atualiza o descritor de arquivo 1 para apontar para file , aberto no modo de truncamento (portanto, seu conteúdo é substituído). A especificação de 2> 1 atualiza o descritor de arquivo 2 para apontar para um arquivo chamado 1 , aberto no modo de truncamento.
A duplicação de descritores de arquivos usando >& (ou &> , que é a forma preferida) simplesmente atualiza um descritor de arquivo para apontar para o que o outro está apontando. No seu último exemplo, > file atualiza o descritor de arquivo 1:
- 0 pontos para
/dev/tty - 1 pontos para
file - 2 pontos para
/dev/tty
e, em seguida, 2>&1 atualiza o descritor de arquivo 2:
- 0 pontos para
/dev/tty - 1 pontos para
file - 2 pontos para
file
(o pedido é significativo: > file 2>&1 produz o acima, 2>&1 > file só acabaria redirecionando o descritor de arquivo 1).
O formulário 1>&9 só funciona se o descritor de arquivo 9 tiver sido aberto, por exemplo. , copiando o descritor de arquivo 1 para ele ( 9>&1 ) ou abrindo um arquivo ( 9> file ). Esse tipo de construção pode ser útil para acompanhar o conteúdo original dos descritores de arquivos ao redirecionar; Assim, em um script, você pode copiar 1 e 2 com segurança, redirecionar a saída e o erro padrão para qualquer finalidade que você precisar e, em seguida, restaurá-los ...
O manual do Bash contém todos os detalhes.