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>&2
com o mesmo efeito - que primeiro redireciona stderr para/dev/null
e 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