[英]How to write shell script for chaincode invoke function for arguments from file?
[英]How to invoke a function in a shell script from a Makefile
我有一個Makefile
,其中包含打印給定變量的目標:
print-%:
@echo $*=$($*)
例如要打印變量CURDIR
的值,我只需發出以下命令:
make print-CURDIR
結果如下:
CURDIR=/Users/j3d/Projects/myproject
現在我想創建一個 shell 腳本,其中包含一組要從任何Makefile
調用的常用函數......這是上面目標的修改版本:
print-%:
. ./make-util printvar $@
這是make-util
:
#!/bin/sh
printvar()
{
@echo $*=$(*)
}
最后,運行上面的腳本......
j3d@j3ds-macbook-pro myproject % make print-CURDIR
...不會產生預期的結果:
. ./make-utils CURDIR
我應該如何調用腳本 function 以便正確打印給定的變量?
您可以創建一套 make recipes(如果您使用 GNU make),您可以在多個 makefile 中包含和使用它,但您必須使用make語法,而不是shell語法,因為它們是 make recipes 即使配方展開后變成 shell 腳本。
您可以研究 GNU make define
語句以及eval
和call
函數,以了解在 GNU make 中創建用戶定義函數的方法。 例如,您可以像這樣編寫 makefile:
$ cat macros.mk
print-%:
@echo $*=$($*)
然后在你的其他makefile中你可以使用:
include macros.mk
並且您會自動獲得該規則。
這里有很多很多的可能性,但細節取決於你想做什么。
你快到了:
由於您將 function 的名稱作為第一個參數傳遞,因此您可以執行
#!/bin/sh
printvar()
{
@echo $*=$(*)
}
"$1"
執行 function。 如果您想要更多安全性(以捕獲錯誤傳遞一些危險命令而不是 function 名稱的情況),您可以執行
[ "$1" = printvar ] && printvar
[ "$1" = other_function ] && other_function
反而。
如果要處理腳本 Make-variables,可以將它們作為附加參數傳遞:
func=$1
shift
[ "$func" = printvar ] && printvar "$@"
[ "$func" = other_function ] && other_function "$@"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.