Você pode identificar a interface usada com este comando (executado como root):
iwconfig 2>/dev/null | grep -o "^\w*"
e a saída será, por exemplo:
wlan0
Você precisa salvar a resposta em uma variável no seu script
Estou executando um script bash que atualiza a tabela de hosts e testa uma conexão com um host específico. Ele é executado com sucesso em várias máquinas. Ao longo do caminho, ele verifica a comunicação com um determinado host usando
ping -I wlan0 <host>
e
ping -I eth0 <host>
Isso funcionou bem até eu tentar usá-lo em uma máquina cujo (um e único) dispositivo sem fio é uma vítima de shenanigans do udev ( semelhante a este ), às vezes usando wlan0 e outras vezes wlan1.
Existe uma maneira confiável de escrever meu script bash para pingar com um dispositivo wlanX arbitrário, sem código de escrita para identificar qual deles a máquina prefere usar em um determinado dia?
Qualquer um desses dois comandos listará suas interfaces do sistema sem loopback, para que você possa iterar entre elas:
ip link | awk '$1+0>1 {print substr($2,1,length($2)-1)}'
netstat -i | awk 'NR>2 && $1 != "lo" {print $1}'
Como alternativa, você pode ajustar a condição awk
para imprimir apenas as linhas que começam com wlan
:
ip link | awk '$1+0 && $2 ~ /^wlan/ {print substr($2,1,length($2)-1)}'
netstat -i | awk 'NR>2 && $1 ~ /^wlan/ {print $1}'