如何在Taskfile的generates及sources段中使用环境变量?
在Taskfile的sources/generates中使用环境变量的正确方式
你遇到的问题根源在于Taskfile对不同字段的变量解析逻辑不一样:
cmds里的$OUTPUT_FILENAME是交给shell去解析的,所以能正常识别环境变量- 但
sources、generates这类字段是由Taskfile自身处理的,它不识别shell风格的$VAR语法,会把$OUTPUT_FILENAME当作一个字面量的文件名,自然找不到对应的文件,所以每次都会判定生成文件不存在,触发任务执行。
正确的做法是使用Taskfile的Go模板语法来引用环境变量,也就是用{{.OUTPUT_FILENAME}}代替$OUTPUT_FILENAME。
修改后的Taskfile.yml如下:
version: "3" env: OUTPUT_FILENAME: output.txt tasks: my_task: cmds: - rm -f $OUTPUT_FILENAME - cp input.txt $OUTPUT_FILENAME - echo "That was it" >> $OUTPUT_FILENAME sources: - input.txt generates: - {{.OUTPUT_FILENAME}}
这样修改后,Taskfile就能正确解析环境变量对应的文件名,判断文件是否存在且最新,避免不必要的任务触发。
补充说明:如果是在Windows环境下使用PowerShell,cmds里的变量引用要改成$env:OUTPUT_FILENAME,但sources和generates里依然用{{.OUTPUT_FILENAME}}。
内容的提问来源于stack exchange,提问作者Dror
相关产品推荐
相关产品推荐

