2016-06-22 5 views
0

私はmakefileに次のコマンドを書き込もうとしました。sedコマンドでmakefile変数を使用する

#get Local Ip Address 
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}') & 

#get Web Url from User 
@read -p "Enter Web Url:" weburl; \ 

sed -e "\|$LOCALIP $weburl|h; \${x;s|$LOCALIP $weburl||;{g;t};a\\" -e "$LOCALIP $weburl" -e "}" hosts.txt 

私は、コマンドを実行しようとすると、私は次のようにsedコマンドを取得すると予想:

sed -e "\|192.168.5.1 www.weburl.com|h; \${x;s|192.168.5.1 www.weburl.com||;{g;t};a\\" -e "192.168.5.1 www.weburl.com" -e "}" hosts.txt 

をしかし、私は次のように取得するには、メイクファイルで

sed -e "\|/s/$/OCALIP eburl|h; \" hosts.txt 
+1

Makefile変数は、通常、 '$(...)'で囲まれています。 –

+0

私は試しました。今私は次のようになっています。 sed -e "\ | 192.168.5.1 & |h; \" hosts.txt –

+1

これらのシェル文をすべてMakefile構文に変換するのではなく、それらをスクリプトに入れてそのスクリプトをMakefileから呼び出すことはできませんか? – oliv

答えて

0

、変数(つまり、定義する可能性が高いすべての変数)を$varnameではなく${varname}で展開する必要があります。後者の場合は、見つかったように$vの値が文字列arnameと連結されます。

パイピングがちょっと疑わしいように見えるので、私はそのMakefileの残りの部分を解析しません。

+0

makefileは '$ {varname}'ではなく '$(varname)'を使用していますか? – Barmar

+0

@Barmar両方の作品。 GNU Makeは、 "$(foo)"または "$ {foo}" 'は変数 'foo'への有効な参照であり、BSD Makeは' $ {foo} 'のみをマニュアルで使用しています。 – Kusalananda

+0

最近では、カッコがもっと慣れ親しんでいると思います。[O'Reilly Make book](http://www.oreilly.com/openbook/make3/book/ch03.pdf)も同意します。 – Barmar

関連する問題