tl; dr
Busque http://www.google.com
no plano de fundo e descarte os stdout
e stderr
.
curl http://www.google.com > /dev/null 2>&1 &
é o mesmo que
curl http://www.google.com > /dev/null 2>/dev/null &
Noções básicas
0
, 1
e 2
representam o arquivo padrão descritores em POSIX sistemas operacionais. Um descritor de arquivo é uma referência do sistema para (basicamente) um arquivo ou soquete .
A criação de um novo descritor de arquivo em C pode ser algo assim:
fd = open("data.dat", O_RDONLY)
A maioria dos comandos do sistema Unix recebe alguma entrada e envia o resultado para o terminal. curl
buscará o que estiver na URL especificada ( google dot com ) e exibir o resultado para stdout
.
Redirecionamento
Comovocêdisse,<
e>
sãousadospararedirecionarasaídadeumcomandoparaoutrolugar,comoumarquivo.
Porexemplo,emls>myfiles.txt
, ls
obtém o conteúdo do diretório atual e >
redireciona sua saída para myfiles.txt
(se o arquivo não existir, ele será criado, sobrescrito, mas você pode usar >>
em vez de >
para acrescentar ao arquivo). Se você executar o comando acima, você notará que nada é exibido no terminal. Isso geralmente significa sucesso em sistemas Unix. Para verificar este cat myfiles.txt
para exibir o conteúdo do arquivo na tela.
> / dev / null 2 > & 1
A primeira parte > /dev/null
redireciona a stdout
, que é curl
para /dev/null
(mais adiante) e 2>&1
redireciona stderr
para stdout
(que foi apenas redirecionado para /dev/null
, então tudo será enviado para /dev/null
).
O lado esquerdo de 2>&1
diz a você que o que será redirecionado, e o lado direito diz onde a. O &
é usado no lado direito para distinguir stdout (1)
ou stderr (2)
dos arquivos denominados 1
ou 2
. Portanto, 2>1
acabaria criando um novo arquivo (se já não existir) chamado 1
e despejaria o resultado stderr
lá.
/dev/null
é um arquivo vazio, um mecanismo usado para descartar tudo escrito nele. Assim,
curl http://www.google.com > /dev/null
está efetivamente suprimindo a saída de curl
.
Masporqueaindaháalgumascoisasexibidasnoterminal?.Estanãoéasaídaregularnãocurl
,masosdadossãoenviadosparaostderr
,usadoaquiparaexibirinformaçõesdeprogressoediagnósticoenãoapenaserros.
curlhttp://www.google.com>/dev/null2>&1
ignoraasaídadecurl
easinformaçõesdeprogressodecurl
s.Oresultadoéquenadaéexibidonoterminal.
Finalmente
O&
nofinalécomovocêdizaoshellparaexecutarocomandocomoum trabalho no < um plano de fundo . Isso faz com que o prompt retorne imediatamente enquanto o comando é executado de forma assíncrona nos bastidores. Para ver os trabalhos atuais, digite jobs
em seu terminal. Observe que isso é diferente do processos em execução no seu sistema. Para ver esse tipo top
no terminal.
Referências