Por que a saída deste ping está fora da subshell?

6

Eu tenho um script simples que verifica se uma interface está conectada:

connected=$(ping -I $1 -qc 1 8.8.8.8 \
  && echo "connected" \
  || echo "not connected")

echo "$connected" | tail -n1

Espero que deva simplesmente retornar "conectado" ou "não conectado". Quando eu realmente uso o script, sempre recebo um aviso antes da minha saída.

ping: Warning: source address might be selected on device other than enp0s25.
not connected

O que há com o aviso aqui, não deveria fazer parte do subshell?

    
por Philip Kirkbride 11.11.2017 / 18:34

1 resposta

18

O aviso é enviado para o erro padrão de ping , que não é capturado. Se você quiser ignorá-lo, redirecione-o para /dev/null explicitamente:

connected=$(ping -I $1 -qc 1 8.8.8.8 2>/dev/null \
  && echo "connected" \
  || echo "not connected")

echo "$connected" | tail -n1
    
por 11.11.2017 / 18:43