Instale o comando se o comando não existir [fechado]

2

Eu tenho isso configurado em 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

A idéia geral é que posso executar algo como make npmig json e, se npm não estiver instalado, receberei um erro real. Se ied não estiver instalado, ele será instalado e, finalmente, ied instalará json .

  • Após a primeira linha, e se a verificação npm falhar, o processo deverá sair.
  • Após o segundo ied deve ser instalado, independentemente de ter sido instalado ou (esperançosamente) instalado.
  • Após o terceiro json deve ser instalado, independentemente de ter sido instalado ou (esperançosamente) instalado.

Isso não funciona. O código que verifica se o comando existe lançará um erro e a receita inteira será encerrada. Eu preciso de uma maneira de controlar o fluxo desta receita para que ela saia quando eu precisar e continue quando eu precisar.

    
por ThomasReggi 07.06.2016 / 23:07

1 resposta

0

Se você ainda não estiver familiarizado, deve dar uma olhada em pkgsrc . pkgsrc é uma ferramenta poderosa que está crescendo ativamente, é amplamente suportada e faz exatamente esse tipo de gerenciamento de pacotes.

Você pode encontrar um exemplo de makefile aqui para você começar.

    
por 07.06.2016 / 23:29