no null em / dev error

5

Eu executei a seguinte linha:

which lsb_release 2&>1 /dev/null

Saída:

error: no null in /dev

Quando verifiquei o erro usando o comando ls /dev/null , null estava presente em /dev . Por que esse erro está ocorrendo? Eu não consegui decifrar o problema.

UPDATE

Eu apenas tentei o comando which acima no sistema de outra pessoa, funcionou perfeitamente sem gerar o erro que recebi.

    
por Abhimanyu Saharan 03.07.2016 / 15:16

2 respostas

6

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
    
por 03.07.2016 / 15:28
2

A sintaxe do comando which lsb_release 2&>1 /dev/null está errada.

Você provavelmente quis executar which lsb_release 2> /dev/null supondo que esteja executando um shell do tipo "sh".

Se você estiver executando o shell csh type, terá mais problemas com o redirecionamento do stderr.

    
por 03.07.2016 / 15:23