首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过Makefile使用外壳管道?

无法通过Makefile使用外壳管道?
EN

Stack Overflow用户
提问于 2015-05-18 10:26:27
回答 1查看 1.3K关注 0票数 0

我有一个shell命令spurious ports,它返回以下数据..。

代码语言:javascript
复制
Service                      Host                         Port   Browser link
spurious-elasticache-docker  192.168.59.103               32794  -
spurious-sqs                 sqs.spurious.localhost       32789  http://sqs.spurious.localhost:32789
spurious-s3                  s3.spurious.localhost        32790  http://s3.spurious.localhost:32790
spurious-elasticache         192.168.59.103               32793  -
spurious-dynamo              dynamodb.spurious.localhost  32791  http://dynamodb.spurious.localhost:32791
spurious-browser             browser.spurious.localhost   32795  http://browser.spurious.localhost:32795
spurious-memcached           192.168.59.103               32792  -

如果我想获得"dynamo“服务的端口号,那么下面的shell脚本可以工作.

代码语言:javascript
复制
lines=`spurious ports`; echo $lines | grep "dynamo" | awk '{print $3}'

这个复述32791

但是,如果我尝试从Makefile内部运行这个命令,我将得到整个spurious ports输出(全部在一行中?):

代码语言:javascript
复制
foobar:
    $(eval port:=$(shell lines=`spurious ports`; echo $$lines | grep 'dynamo' | awk '{print $3}'))
    @echo $(port)

我还尝试将命令移动到shell脚本文件中:

代码语言:javascript
复制
#!/bin/sh
lines=`spurious ports`; echo $lines | grep "dynamo" | awk '{print $3}'

在Makefile中使用:

代码语言:javascript
复制
PORT:=$(shell ./scripts/spurious-ports.sh)
bing:
    @echo $(PORT)

但这也没用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 10:42:59

这似乎是引号问题。当变量带有多行时,需要将该变量放在双引号中,以保留行尾的/n。

比如。

代码语言:javascript
复制
 VAR="1
 2
 3
 4"
 echo $VAR   ## here it will print "1 2 3 4"

 but echo "$VAR" will print 

 1
 2
 3
 4

我想这能解决你的问题。有关更多细节,请阅读shell中的引号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30300760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档