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.