我想创建一个shell脚本,但以前没有接触过。有一个gpg命令:
gpg --keyserver SERVER --recv-keys KEY
问题是,如果密钥已经被添加,我不想运行此命令。有没有方法可以检查密钥是否存在于密钥列表中?谢谢!
运行gpg --list-keys [key-id]
命令(或简写命令-k
),如果存在匹配的密钥则返回代码0(成功),否则返回其他代码(失败)。不要像评论中其他人建议的那样列出所有密钥,然后再使用grep
命令进行过滤,这将会在密钥环中包含大量密钥时变得极慢。运行命令。
gpg --list-keys [key-id] || gpg --keyserver [server] --recv-keys [key-id]
为了获取丢失的密钥,可能需要丢弃第一个gpg
命令的输出(gpg --list-keys [key-id] > /dev/null 2>&1 || ...
),因为你只关心返回码。
请注意:
gpg --list-keys
列出当前使用的密钥环中所有可用的密钥。 如果密钥在其他任何密钥环中,这对你使用它没有帮助。 apt-key list
仅列出apt软件包管理器密钥环中的密钥 - 这似乎不是OP尝试做的事情。 - Jens Erat你可以做:
[[ $(gpg --list-keys | grep -w KEY) ]] && echo "Key exists" ||
gpg --keyserver SERVER --recv-keys KEY
附加内容(适用于apt密钥环):
[[ $(apt-key list | grep -w KEY) ]] && echo "Key exists" ||
gpg --keyserver SERVER --recv-keys KEY
apt-key
可用apt-key
仅适用于apt
软件包管理器的密钥环,而不是用户的密钥环。这很可能不是OP想要做的事情。 - Jens Eratgpg --list-keys
是正确的方法。 - Jahid正确的做法是运行以下命令
gpg --keyserver hkp://keyserver.ubuntu.com -k [your-key-id]
gpg -k
有什么问题吗? - Markus W Mahlberg