@command -v gpg 为什么命令前面有版本标志?

@command -v gpg 为什么命令前面有版本标志?
verify:
    @command -v gpg 2>/dev/null || { echo "Cound not find gpg. Aborting."; exit 1; }

我在 Makefile 中看到以下命令。我理解它执行以下操作:

  1. verifybuild在 Makfile 中之前被调用
  2. @command用于不回显正在运行的命令,也不回显将要调用的命令的输出
  3. -v gpg 2>/dev/null将检查版本,如果未找到 gpg,它将错误输出(sterr)重定向到 null(nowhere)
  4. || { echo "Cound not find gpg. Aborting."; exit 1; }如果前一个命令产生错误,将会回显一条消息并以错误 1 ​​退出当前脚本(返回 false,这就是 || 存在的原因)

我不明白的是-v gpg。检查版本时,-v通常会在命令后面出现。这样做有什么原因吗?

答案1

-vcommand内置的参数,而不是的参数gpg,它不是在寻找“gpg”版本,而是在查看是否存在名为“gpg”的命令。

help command

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

它类似于type内置的:

$ command -v gpg
/usr/bin/gpg

如果无法找到该命令,它将返回非零退出状态,因此将运行“OR”部分:

|| { ... }

将会打印出:

Cound not find gpg. Aborting.

退出状态代码为“1”。

相关内容