O que significa 2> / dev / null?

242

Gostaria de uma breve explicação da seguinte linha de comando:

grep -i 'abc' content 2>/dev/null 
Ingênuo
fonte

Respostas:

348

O operador> redireciona a saída geralmente para um arquivo, mas pode ser para um dispositivo. Você também pode usar >> para acrescentar.

Se você não especificar um número, o fluxo de saída padrão será assumido, mas você também poderá redirecionar erros

> fileredireciona stdout para arquivo
1> fileredireciona stdout para arquivo
2> fileredireciona stderr para arquivo
&> fileredireciona stdout e stderr para arquivo

/dev/nullé o dispositivo nulo, ele pega qualquer entrada que você deseja e joga fora. Pode ser usado para suprimir qualquer saída.

Warren Hill
fonte
6
existe uma diferença entre > /dev/null 2>&1e&> /dev/null
Alexander Mills
13
Na prática hoje, acho que não existe 2>&1uma sintaxe mais antiga, portanto &>não teria funcionado anos atrás, mas ambos são equivalentes.
perfil completo de Warren Hill
28

Em resumo, ele redireciona stderr(fd 2) para o buraco negro (descarta a saída do comando).

Alguns casos de uso mais comuns para redirecionamento:

command > /dev/null 2>&1 &

Execute commandem segundo plano, descarte stdoutestderr

command >> /path/to/log 2>&1 &

Execute commande acrescente stdout e stderr a um arquivo de log.

No Bash 4+, uma forma mais curta (mas menos legível) é funcional

command &>> /path/to/log
Terry Wang
fonte
3
Existe uma boa razão para usar em > /dev/null 2>&1vez de &> /dev/null?
Craig McQueen
7
@CraigMcQueen &>é novo no Bash 4, o primeiro é apenas a maneira tradicional, estou tão acostumado a isso (fácil de lembrar).
Terry Wang
@CraigMcQueen, de acordo com um comentário nesta resposta , &> /dev/nullpode não funcionar em alguns shells, mas> / dev / null 2> & 1 funcionará em todos os shells compatíveis com POSIX.
Stack Underflow
3
Por que é 2> & 1 e não 2 & 1> ??
marienbad 11/03
1
@ marienbad, na verdade, é uma pergunta que vale a pena postar :-) A sintaxe é fn>targetonde fnum número de arquivo (0-2 geralmente, alguns programas definem mais números) e targetgeralmente é um nome de arquivo, mas aqui está outro número de arquivo - prefixado com o &qual é o sintaxe para "Quero um número de arquivo em vez de um nome de arquivo".
toolforger
9

/dev/nullé tratado como um buraco negro no Linux / Unix, para que você possa colocar algo nisso, mas não poderá recuperá-lo /dev/null.

Além disso, 2>significa que você está redirecionando (ou seja >) o stderr (ou seja 2) para o buraco negro (ou seja /dev/null)

Seu comando é:

grep -i 'abc' content 2>/dev/null 

Não tente terminar com outra barra como esta - 2>/dev/null/(não é um diretório).

Indrajeet Gour
fonte
2

O conteúdo grep -i 'abc' gerará uma saída exibida no seu console, incluindo erros.

A especificação 2>/dev/nullfiltrará os erros para que eles não sejam gerados no console.

Mais detalhadamente: 2 representa o descritor de erros, onde os erros são gravados. Por padrão, eles são impressos no console.

\> redireciona a saída para o local especificado, neste caso /dev/null

/dev/null é o dispositivo Linux padrão para o qual você envia a saída que deseja ignorar.

Mauro Zallocco
fonte
Conciso e no tópico. Boa resposta.
Sergiy Kolodyazhnyy