在sed命令中使用makefile变量

时间:2016-06-22 14:46:07

标签: bash sed makefile

我已尝试在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 个答案:

答案 0 :(得分:0)

在Makefile中,长于单个字符的变量(即您可能定义的所有变量)需要使用${varname}进行扩展,而不是$varname。正如您所发现的那样,后者会导致$v与字符串arname连接在一起。

我不会开始解析Makefile的其余部分,因为管道看起来有点可疑。