Em primeiro lugar, os redirecionamentos podem ocorrer em qualquer lugar na linha de comando, não necessariamente no final ou no início.
Por exemplo:
echo foo >spamegg bar
salvará foo bar
no arquivo spamegg
.
Além disso, existem duas versões de which
, uma é shell embutida e a outra é executável externa (vem com debianutils
no Debian).
Em seu comando:
which lsb_release 2>&1 /dev/null
por 2&>1
, você está redirecionando o STDERR (FD 2) para onde está apontado STDOUT (FD 1), não para /dev/null
e isso é feito primeiro.
Portanto, o restante do comando é:
which lsb_release /dev/null
Como não há comando como /dev/null
, daí o erro.
Observe que esse comportamento depende do fato de which
ser um shell interno ou executável externo, bash
, ksh
, dash
não tem um incorporado e usa which
externo e isso simplesmente ignora o erro , não mostra nenhuma mensagem de erro.
Por outro lado, zsh
usa um which
incorporado e mostra:
/dev/null not found
Então, presumivelmente, esse erro específico é mostrado pelo which
do shell que você está usando.
Além disso, parece que você deseja apenas redirecionar o STDERR para /dev/null
se lsb_release
não existir no PATH
, ou seja, which
exibirá um erro. Em caso afirmativo, basta redirecionar o STDERR para /dev/null
:
which lsb_release 2> /dev/null