ifconfig apenas exibe as interfaces que estão ativas.
No Linux, você pode obter uma lista de interfaces no diretório /sys/class/net . Então, com zsh , você pode fazer:
interfaces=(/sys/class/net/*(DN:t))
Para excluir lo :
set -o extendedglob
interfaces=(/sys/class/net/^lo(DN:t))
Somente para os up , você poderia fazer:
interfaces=(/sys/class/net/*(DNe{'[[ $(<$REPLY/operstate) = up ]]'}:t)
ou, assumindo o valor padrão de $IFS .
interfaces=($(ip -br link | LC_ALL=C awk '$2 == "UP" {print $1}'))
No meu sistema, pelo menos, o status de lo é UNKNOWN, portanto, seria excluído.
Isso também funcionaria com bash , desde que os nomes de interface não contenham caracteres curinga. Nas versões mais recentes do Linux, o IIRC garante que os nomes de interface não contenham a guia space e os caracteres newline (o padrão $IFS ), para que eles não causem problemas. Outros espaços em branco do Unicode são permitidos, portanto, o LC_ALL = C, que deve garantir que awk não será dividido neles.