Bash grep本地IP地址并写入makefile中的文件?

时间:2014-02-26 19:50:41

标签: bash makefile ifconfig

我正在尝试使用ifconfig获取本地ip并将其写入文件但由于某种原因无法执行此操作。

run:
    LOCALIP=$(shell ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | awk '{print $1}') &
    echo "var LOCAL_IP = '${LOCALIP}'" > local_ip.js &

它确实获得了正确的IP但由于某种原因无法将其写入文件并且文件仅包含var LOCAL_IP = ''

任何人都可以帮助我并告诉我我做错了吗?

3 个答案:

答案 0 :(得分:2)

两个问题:一,Makefile配方中的每个单独命令都在一个单独的shell中执行,因此您需要“合并”它们。第二,你需要将回声中的$加倍,以便将其发送到shell,而不是先由make扩展。这应该有效:

run:
        LOCALIP=$(shell ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | awk '{print $1}'); \
        echo "var LOCAL_IP = '$${LOCALIP}'" > local_ip.js

分号和行继续反斜杠确保整个配方在同一个shell中执行,因此LOCALIP运行时仍设置echo。您可以通过在echo的参数中直接嵌入命令替换来“简化”这一点。

run:
        echo "var LOCAL_IP = '$(shell ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | awk '{print $1}')'" > local_ip.js

答案 1 :(得分:0)

这个awk可以工作:

ifconfig | awk -F: '/inet addr/&& !($2 ~ /127\.0\.0\.1/){gsub(/ .*/, "", $2); print $2}'

答案 2 :(得分:0)

ifconfig | grep '192.168.0.' | awk '{print $2}' | tr -d 'addr:'

Termux - Android

NewTerm2 - iOS

Windows Subsystem For Linux