0

我正在尝试使用 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 = ''

谁能帮助我并告诉我我做错了什么?

4

2 回答 2

2

两个问题:第一,Makefile 配方中的每个单独命令都在单独的 shell 中执行,因此您需要“合并”它们。第二,您需要$将 echo 中的 加倍,以便将其发送到 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
于 2014-02-26T20:27:12.673 回答
0

这个 awk 可以工作:

ifconfig | awk -F: '/inet addr/&& !($2 ~ /127\.0\.0\.1/){gsub(/ .*/, "", $2); print $2}'
于 2014-02-26T19:57:09.933 回答