如果命令不存在则安装命令

如果命令不存在则安装命令

我把这个设置在一个Makefile.

ARG_2 := $(word 2, $(MAKECMDGOALS))

command_exist=command -v $(1) >/dev/null 2>&1
command_not_exist=! command -v $(1) >/dev/null 2>&1

npmig:
    $(call command_not_exist,npm) && echo 'npm is not installed'
    $(call command_not_exist,ied) && npm install ied
    $(call command_not_exist,$(ARG_2)) && ied install $(ARG_2) -g

一般的想法是我可以运行类似的东西make npmig json,如果npm没有安装我会得到一个实际的错误。如果ied没有安装就会安装,最后ied会安装json

  • 在第一行之后,如果npm检查失败,则进程应退出。
  • ied无论是已安装还是(希望)刚刚安装,都应安装第二个之后。
  • 第三个之后json应该安装,无论它是否已安装,或者(希望)刚刚安装。

这是行不通的。检查命令是否存在的代码将抛出错误,并且整个配方将退出。我需要一种方法来控制这个配方的流程,以便它在我需要时退出并在我需要时继续。

答案1

如果您还不熟悉,您应该仔细看看软件包源pkgsrc是一个功能强大的工具,正在积极发展,得到广泛支持,并且正是这种类型的包管理。

您可以找到一个示例 makefile这里让您开始。

相关内容