Redirecionar stderr da construção de parênteses duplos

4

Gostaria de redirecionar o stderr de uma construção de parênteses duplos. Por exemplo:

a=$(($var/$var2))

geraria algumas mensagens de erro se $var2 = 0 , eu não quero que o usuário veja isso.

Eu sei que posso simplesmente checar o zero antes de fazer a divisão, mas gostaria de saber se há uma maneira de fazer esse redirecionamento, por curiosidade e porque isso pode ser útil em outras situações.

Eu já tentei:

a=$(($var/$var2)) 2> /dev/null

O que não funciona e

a=$(($var/$var2 2> /dev/null ))

O que dá um erro de sintaxe.

    
por Bakuriu 14.10.2012 / 20:57

2 respostas

3

Esse comportamento é causado pelo fato de que o cálculo é feito pelo próprio shell, não por um comando externo. Para redirecionar o STDERR do shell, você precisa iniciá-lo com esse redirecionamento, mas depois perde todos os seus erros. bash 2> /dev/null

Ou você usa um grupo de chaves, que eu acho que é uma solução mais apropriada:

{ a=$(( val1 / val2 } )); } 2> /dev/null
    
por 14.10.2012 / 21:08
2
V='expr "$var" / "$var2" 2>/dev/null'

mas se a divisão falhar, o resultado estará vazio.

    
por 14.10.2012 / 21:38