我正在将一个参数传递给Makefile例程,并基于此确定传递给后续shell命令的参数。
target:
if [ "$(tensorflowgpu)" = "false" ]; then
conda env create -f temp-environment.yaml
else
conda env create -f environment.yaml
fi
我想知道是否有一种方法可以在不使用if else fi
语法的情况下将分别为apt.yaml的文件名直接插入到conda create
命令中。不将结果分配给变量的三元运算符在shell脚本中似乎不可用。
如果这真的根本不可行,我想知道除了将conda create
命令重构为一个函数并将yaml文件传递给它之外,是否还有其他方法可以使这段代码更具可维护性和可读性。
免责声明:我不太精通shell脚本。
你可以这样做:
target:
[ "$(tensorflowgpu)" = "false" ] && prefix=temp- || prefix= ;
conda env create -f $${prefix}environment.yaml
我不知道你是否更喜欢这样。
或者,由于您在这里使用的是make变量,而不是shell变量,如果您愿意依赖GNU make,您可以使用构造的变量名:
YAMLFILE_false = temp-environment.yaml
YAMLFILE_base = environment.yaml
YAMLFILE = $(firstword $(YAMLFILE_$(tensorflowgpu)) $(YAMLFILE_base))
target:
conda env create -f $(YAMLFILE)
或者您可以使用GNU make的if
函数;例如:
target:
conda env create -f $(if $(filter false,$(tensorflowgpu)),temp-)environment.yaml
或者你可以把它放在一个变量中,让它更干净一点:
YAMLFILE = $(if $(filter false,$(tensorflowgpu)),temp-)environment.yaml
target:
conda env create -f $(YAMLFILE)