Eu finalmente encontrei um jeito.
Como se vê, já que o que eu realmente quero fazer é verificar o link, não preciso de ifup
. Em vez disso, posso usar ethtool
(embora tenha que ser instalado primeiro), assim:
connected=$(ethtool eth0 | awk '/Link detected:/ { print $3 }')
Se, no entanto, eu precisasse verificar ifup
, eu poderia usar um processo em segundo plano e a variável $!
shell. Se eu quisesse verificar se ainda estava em execução após o tempo limite, poderia fazer isso:
ifup eth0 &
sleep 5
if ps -p $! | grep -q "$!"; then
connected='no'
kill $!
else
connected='yes'
fi
Se eu quisesse capturar a saída de ifup
, minha melhor aposta seria redirecionar para um arquivo temporário. (Eu olhei em pipes nomeados, mas eu não acho que eles funcionariam para esse propósito; ifup
iria bloquear até que outro processo estivesse lendo sua saída).