Jak przechwycić pierwszy adres IP, który pochodzi z ifconfig
polecenia?
ifconfig -a
enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 100.14.22.12 netmask 255.255.0.0 broadcast 100.14.255.255
inet6 fe80::250:56ff:fe9c:158a prefixlen 64 scopeid 0x20<link>
ether 00:10:56:9c:65:8a txqueuelen 1000 (Ethernet)
RX packets 26846250 bytes 12068811576 (11.2 GiB)
RX errors 0 dropped 58671 overruns 0 frame 0
TX packets 3368855 bytes 1139160934 (1.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Spodziewany wynik:
IP=100.14.22.12
Odpowiedzi:
Lepiej unikać używania
ifconfig
do uzyskiwania adresu IP w skryptach, ponieważ jest on przestarzały w niektórych dystrybucjach (np. CentOS i inne, nie instaluj go już domyślnie).W innych systemach dane wyjściowe ifconfig różnią się w zależności od wydania dystrybucji (np. Dane wyjściowe / odstępy / pola
ifconfig
różnią się od Debian 8 do Debian 9, na przykład).Aby uzyskać adres IP
ip
, w podobny sposób pytasz:Lub jeszcze lepiej:
Lub, jak pytasz „IP =”
Bezwstydnie dostosowując pomysł @Roman
Normalna wydajność:
Od
man ip
:Zobacz jeden przykład, dlaczego
ifconfig
nie jest to zalecane: BBB: `bbb-conf - zaznacz` pokazując adresy IP jako` inet` - ifconfig woesAby
ifconfig
dowiedzieć się, dlaczego tak się dzieje, zobacz Różnica między poleceniami „ifconfig” i „ip”źródło
awk
. Dla mnie za dużo siły mózgowej, wciąż się budzę. Unikajifconfig
, nie ma przyszłości, a pozycja zmian adresu IP, istnieją co najmniej dwie różne wersje / implementacje (?) Dla Linuksa, które znam.-brief
parametr, a jego wynik staje się łatwiejszy do przeanalizowania (2015-08-31: git.kernel.org/pub/scm/network/iproute2 /iproute2.git/commit/… )-o
co rzeczywiście wydaje się przydatne w skryptachAwk
rozwiązanie:Przykładowe dane wyjściowe:
źródło
źródło
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '