此 bash 命令在 Makefile 中未正确运行

aah*_*nik 2 bash shell makefile

在 Makefile 里面我有这样的:

release:
    version=$$(poetry version | cut -f2 -d " ")
    echo "release $$version"
Run Code Online (Sandbox Code Playgroud)

如果我运行,我的终端中的语句将毫无问题地运行。

release:
    version=$$(poetry version | cut -f2 -d " ")
    echo "release $$version"
Run Code Online (Sandbox Code Playgroud)

但如果我跑的话

> version=$(poetry version | cut -f2 -d " ")
> echo "release $version"
release 0.0.2
Run Code Online (Sandbox Code Playgroud)

您可以在输出中看到release版本号旁边。未显示。

Bar*_*mar 5

makefile 配方中的每个命令都在其自己的 shell 进程中执行。因此,变量赋值发生在一个 shell 进程上,然后该进程退出并且其变量被丢弃。该echo命令在没有该变量的新进程中执行。

您需要转义换行符并使用;命令分隔符在同一进程中运行命令。

release:
    version=$$(poetry version | cut -f2 -d " "); \
    echo "release $$version"
Run Code Online (Sandbox Code Playgroud)