2>&1 redirecionará stderr para onde o stdout apontar atualmente. O argumento >/dev/null redirecionará o stdout para /dev/null , ou seja, descarta / silenciosamente a saída pelo comando. Mas se você também quiser descartar (tornar silencioso) o stderr, depois de redirecionar o stdout para /dev/null , especifique 2>&1 para redirecionar o stderr para o mesmo local.
Exemplo (para visualizar a diferença):
$ ls
file1
file2
$ ls file1 > /dev/null
$
Aqui, a saída de ls file1 é file1 , que é enviada para /dev/null e, portanto, não recebemos nada. Mas:
$ ls file12 > /dev/null
ls: cannot access file12: No such file or directory
que dá stderr e como apenas a saída é enviada para /dev/null . Então, Se você quiser descartar / stderr silencioso, também poderá redirecionar stderr para stdout e, portanto, ambos serão enviados para /dev/null da seguinte forma:
$ ls file12 >/dev/null 2>&1
$
Note que a ordem / sequência de redirecionamento é importante. 2>&1 para redirecionar o erro padrão deve sempre ser colocado após redirecionar a saída padrão ou não faz nada. No exemplo acima, se você executar ls file12 2>&1 >/dev/null , verá o stderr impresso no terminal; se você executar ls file12 >/dev/null 2>&1 você não irá.
- Como alternativa, você também pode usar
ls file1 file12 2>/dev/null 1>&2com o mesmo efeito - que primeiro redireciona stderr para/dev/nulle redireciona o stdout para apontar para o mesmo local para o qual o stderr está apontando atualmente. - Com a nova versão do bash, você também pode usar
>&, da mesma forma que:ls file12 >& /dev/null, que redirecionará stdout & stderr para/dev/null