在Makefile中,我有这样的文件:
release:
version=$$(poetry version | cut -f2 -d " ")
echo "release $$version"
如果我运行,来自我的终端的语句运行时不会出现任何问题。
> version=$(poetry version | cut -f2 -d " ")
> echo "release $version"
release 0.0.2
但如果我跑了,
> make release
version=$(poetry version | cut -f2 -d " ")
echo release $version
release
您可以在输出中看到,release
旁边没有显示版本号。
makefile配方中的每个命令都在自己的shell进程中执行。因此,变量分配发生在一个shell进程上,然后该进程退出并丢弃其变量。echo
命令在没有该变量的新进程中执行。
您需要转义换行符,并使用;
命令分隔符在同一进程中运行命令。
release:
version=$$(poetry version | cut -f2 -d " ");
echo "release $$version"