Gostaria de uma breve explicação da seguinte linha de comando:
grep -i 'abc' content 2>/dev/null
command-line
bash
redirect
stdout
Ingênuo
fonte
fonte
> /dev/null 2>&1
e&> /dev/null
2>&1
uma sintaxe mais antiga, portanto&>
não teria funcionado anos atrás, mas ambos são equivalentes.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:
Execute
command
em segundo plano, descartestdout
estderr
Execute
command
e acrescente stdout e stderr a um arquivo de log.No Bash 4+, uma forma mais curta (mas menos legível) é funcional
fonte
> /dev/null 2>&1
vez de&> /dev/null
?&>
é novo no Bash 4, o primeiro é apenas a maneira tradicional, estou tão acostumado a isso (fácil de lembrar).&> /dev/null
pode não funcionar em alguns shells, mas> / dev / null 2> & 1 funcionará em todos os shells compatíveis com POSIX.fn>target
ondefn
um número de arquivo (0-2 geralmente, alguns programas definem mais números) etarget
geralmente é 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"./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 seja2
) para o buraco negro (ou seja/dev/null
)Seu comando é:
Não tente terminar com outra barra como esta -
2>/dev/null/
(não é um diretório).fonte
O conteúdo grep -i 'abc' gerará uma saída exibida no seu console, incluindo erros.
A especificação
2>/dev/null
filtrará 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.fonte