@command -v gpg por que o sinalizador de versão está antes do comando?

1
verify:
    @command -v gpg 2>/dev/null || { echo "Cound not find gpg. Aborting."; exit 1; }

Eu vi o seguinte comando em um Makefile. Eu entendo que faz o seguinte:

  1. verify é chamado antes de build em Makfile
  2. @command é usado para não ecoar o comando sendo executado e para não repetir a saída do comando que será chamado
  3. -v gpg 2>/dev/null irá verificar a versão e se o gpg não for encontrado, ele irá redirecionar a saída do erro (sterr) para null (nenhum lugar)
  4. || { echo "Cound not find gpg. Aborting."; exit 1; } ecoará uma mensagem e sairá do script atual com o erro 1 se o comando anterior criar um erro (retorna false, e é por isso que o || está lá)

O que eu não entendo é -v gpg . Ao verificar a versão, o -v normalmente vem após o comando. Existe uma razão para fazer isso?

    
por Karl Morrison 16.06.2017 / 10:35

1 resposta

3

O -v é um argumento para command construído não para o gpg , não está procurando a versão "gpg", está procurando ver se existe algum comando chamado "gpg".

De help command :

-v    print a description of COMMAND similar to the 'type' builtin

é semelhante a type builtin:

$ command -v gpg
/usr/bin/gpg

Se não conseguir encontrar o comando, ele retornará um status de saída diferente de zero, portanto a seção "OR" será executada:

|| { ... }

que será impresso:

Cound not find gpg. Aborting.

com um código de status de saída "1".

    
por Ravexina 16.06.2017 / 10:40