我有一个shell命令spurious ports,它返回以下数据..。
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脚本可以工作.
lines=`spurious ports`; echo $lines | grep "dynamo" | awk '{print $3}'这个复述32791
但是,如果我尝试从Makefile内部运行这个命令,我将得到整个spurious ports输出(全部在一行中?):
foobar:
$(eval port:=$(shell lines=`spurious ports`; echo $$lines | grep 'dynamo' | awk '{print $3}'))
@echo $(port)我还尝试将命令移动到shell脚本文件中:
#!/bin/sh
lines=`spurious ports`; echo $lines | grep "dynamo" | awk '{print $3}'在Makefile中使用:
PORT:=$(shell ./scripts/spurious-ports.sh)
bing:
@echo $(PORT)但这也没用。
发布于 2015-05-18 10:42:59
这似乎是引号问题。当变量带有多行时,需要将该变量放在双引号中,以保留行尾的/n。
比如。
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中的引号。
https://stackoverflow.com/questions/30300760
复制相似问题