2012-06-22 31 views
2

我正在寻找一种方法来获取命令的输出和退出代码到makefile中的变量。Makefile:如何将一个命令的输出和退出代码分配给一个变量?

Basicly我想这样的:(bash)的

output=$(whoami) 
returnval=$? 
echo "OUT:" 
echo $output 
echo "RET:" 
echo $returnval 

是在makefile

注:应在规则部分工作

感谢

编辑:解决

$(eval OUTPUT_RC="$(shell whoami;echo $$?)") 
$(eval OUTPUT="$(shell echo $(OUTPUT_RC) | sed -e "s/^\(.*\)\(.\{2\}\)$$/\1/")") 
$(eval RC="$(shell echo $(OUTPUT_RC) | sed -e "s/^.*\(.\)$$/\1/")") 
echo $(OUTPUT) 
echo $(RC) 
+0

另一种解决方案,也很复杂,但使用较少的外部进程可以在这里找到:http://stackoverflow.com/a/40710111/1905491你不需要'eval's有BTW。用':='来分析就足够了。 – stefanct

+0

使用shell来拆分组合结果比仅运行两个单独的命令更加可怕。为什么你会期望'whoami'返回一个错误? – tripleee

+0

'whoami'只是一个想象编译器命令的例子,你不想运行两次编译器命令。 – Eun

回答

-2

GNU化妆提供shell功能,如:

OUTPUT=$(shell whoami) 
OUTPUT_RC=$(shell whoami; echo $$?) 
+0

这个坏消息是它运行了2次,想象它是一个编译命令 – Eun

0

如果你要使用eval无论如何,使其打印东西,你可以直接eval

$(eval $(shell echo OUTPUT_RC=`whoami`; echo $$?)) 
OUTPUT=$(word 1,$(OUTPUT_RC)) 
RC=$(word 2,$(OUTPUT_RC)) 
相关问题