&
é o prefixo que você dá aos descritores de arquivos que o shell tem aberto, ao contrário dos caminhos dos arquivos não abertos (que é o padrão). STDOUT
é quase sempre descritor de arquivo 1
e STDERR
quase sempre 2
.
Para o colchete angular, o seu shell é geralmente inteligente o suficiente para saber qualquer número que o anteceda ser o descritor de arquivo. Se você omitir um, normalmente você está falando de STDOUT
para >
e STDIN
para <
.
Então, montando:
# command > /tmp/myFile
# command 1> /tmp/myFile
Direcione command
' STDOUT
para o arquivo simples chamado /tmp/myFile
# command >&2
# command 1>&2
Direcione command
' STDOUT
para o arquivo já aberto no descritor de arquivo 2
(STDERR).
# command 2>&1
Redireciona qualquer coisa que normalmente seria gravada em STDERR
para o número do descritor de arquivo 1
( STDOUT
).
Estes são genéricos para qualquer tipo de arquivo de E / S que você faz do próprio shell. É só que o próprio descritor de arquivos em questão geralmente tem um significado especial.
Se você quiser, pode redirecionar STDERR
para um arquivo que também pode ser dito para atribuir o descritor de arquivo 2
a um arquivo nomeado:
# command 2> /tmp/newFile
Por exemplo:
[root@edc4 ~]# ./causeError 2>/tmp/containError
[root@edc4 ~]# cat /tmp/containError
Error Message
[root@edc4 ~]#
O Bash HOWTO entra em muito mais detalhes sobre como trabalhar com arquivos descritores em bash
. Você pode abrir arquivos embaixo de descritores de arquivos que não sejam os três usuais ( 0
, 1
e 2
), mas isso geralmente é reservado para scripts mais elaborados e as pessoas geralmente lidam apenas com as três normais. Mesmo assim, geralmente é apenas 1
e 2
pessoas lidam com isso.