2012-06-22 66 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)) 
相關問題