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

2 つの問題: 1 つは、Makefile レシピ内の個別のコマンドが個別のシェルで実行されるため、それらを「マージ」する必要があることです。$2 つ目は、最初に によって展開されるのではなく、シェルに送信されるように、エコー内でを 2 倍にする必要があります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

セミコロンと行継続バックスラッシュにより、レシピ全体が同じシェルで実行されることが保証されるため、実行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 に答える