![如何使用 bash 检查 gpg 密钥是否已存在然后跳过下载/添加?](https://linux22.com/image/916213/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20%E6%A3%80%E6%9F%A5%20gpg%20%E5%AF%86%E9%92%A5%E6%98%AF%E5%90%A6%E5%B7%B2%E5%AD%98%E5%9C%A8%E7%84%B6%E5%90%8E%E8%B7%B3%E8%BF%87%E4%B8%8B%E8%BD%BD%2F%E6%B7%BB%E5%8A%A0%EF%BC%9F.png)
所以基本上,我想运行这 2 个命令,但我想检查这些键是否已经存在。我知道如何在 bash 中执行 ifthenelse,但我不确定如何获取结果并将其存储在变量中以供我检查,以便我可以将其放入条件运算符中。例如,如果它已经存在,那么我可以跳过下载并再次添加它。
示例 1(--fetch-keys):
sudo apt-key adv --fetch-keys https://packages.microsoft.com/keys/microsoft.asc
sudo tee /etc/apt/sources.list.d/vscode.list > /dev/null <<- END
deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main
END
示例 2(--recv-keys):
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B9A06DE3
sudo tee /etc/apt/sources.list.d/inkscape.list > /dev/null <<- END
deb [arch=amd64] http://ppa.launchpad.net/inkscape.dev/stable-daily/ubuntu bionic main
END
答案1
那么类似这样的情况怎么样:
TEST=$(apt-key list 2> /dev/null | grep my_app_name)
if [[ ! $TEST ]]; then
echo "Missing - need to run --fetch-keys or --recv-keys"
fi
我将 stderr 导入到空设备( 2> /dev/null )以隐藏在脚本中使用 apt-key 列表时收到的警告。
尝试单独运行“sudo apt-key list”,这样您就可以看到输出的样子,以防您想将“grep”更改为更具选择性。
答案2
您可以将每个密钥保存在其自己的文件中并测试该文件是否存在。
keyring=/etc/apt/trusted.gpg.d/inkscape.gpg
if [ ! -f $keyring ]; then
sudo apt-key --keyring $keyring \
adv --keyserver keyserver.ubuntu.com --recv-keys B9A06DE3
fi
sudo tee /etc/apt/sources.list.d/inkscape.list > /dev/null <<- END
deb [arch=amd64] http://ppa.launchpad.net/inkscape.dev/stable-daily/ubuntu bionic main
END
答案3
命令“apt-key list”可能不会列出您已有的所有密钥,在这种情况下“grep”不会通知您密钥的存在。
如果你使用“gpg --import”导入密钥,那么“gpg --list-keys”后跟 grep 会告知你该密钥是否存在。例如
gpg --list-keys | grep zoom
if [[ $? -ne 0 ]]; then
wget https://zoom.us/linux/download/pubkey?version=5-12-6
gpg --import pubkey?version=5-12-6
fi