[8] Comentário enviado por hellnux em 02/02/2015 - 20:01h
Olá!
Bela contribuição. Gosto muito deste tipo de dica. Já usei bastante esses de pegar IP, mas ele não são muito eficientes quando o locale são diferentes.
Por exemplo, quando o LANG=en_US
$ ifconfig | grep "inet end.:" | awk '{print $3}' | grep -v '127.0.0.1' | cut -f2 -d:
retorna nada
$ ifconfig | awk '/inet (end|addr).?:/ && !/127.0.0.1/ {print $3}'
Bcast:IP_qualquer
Prefiro usar apenas:
$ hostname -i
Assim deixo minha contribuição =D
Obrigado pela contribuição.
Explico aqui o porque dos comandos não funcionarem quando em LANG=en_US.
Quando o sistema está configurado para o inglês, o comando ifconfig imprime o resultado e mais especificamente a parte que queremos (o endereço IP) da seguinte forma:
eth0 Link encap:Ethernet HWaddr 00:1e:c9:fa:25:8b
inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0
etc
etc
....
Já para a LANG=pt_BR.UTF-8, o resultado é o seguinte:
eth0 Link encap:Ethernet Endereço de HW 00:1e:c9:fa:25:8b
inet end.: 192.168.0.13 Bcast:192.168.0.255 Masc:255.255.255.0
etc
etc
....
O problema ocorre exatamente por causa da formatação da 2º linha: em inglês, a parte que queremos fica:
"inet addr:192.168.0.13" e em português fica: "inet end.: 192.168.0.13"
Note que no inglês não há espaço entre addr: e o número do IP e em português há.
Sendo assim, em inglês o IP está em $2 e em português está em $3
Adaptando os comandos, tanto o que passei quanto o criado pelo colega @jhonatanp fica o seguinte:
Para sistemas em inglês:
ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: (comando que apresentei modificado: troquei o $3 por $2)
ifconfig | awk '/inet (end|addr).?:/ && !/127.0.0.1/ {print $2}'| cut -f2 -d: (comando do @jhonatanp modificado: acrescentei
o cut para retirar "addr:" do resultado; troquei o $3 por $2)
Em relação ao "hostname -i", ele é mais rápido e também outra alternativa.
Bom, como eu digo: "Vários caminhos para o mesmo destino!