简单的 bash gpg 更新脚本

简单的 bash gpg 更新脚本

我有一个文本文件,里面保存着我所有重要的个人数据,比如我所有账户的密码和信用卡的 PIN,以防我忘记它们。显然,这个文件需要加密,所以我求助于 gpg(GNU Privacy Guard)。

问题是,我有时必须重新打开文件,不仅为了阅读,例如恢复我忘记的密码,而且为了书写,例如写下我在新网站上创建的新帐户的密码。然后,我需要删除旧档案,从更新的文本文件创建新档案,然后删除文本文件。

我编写了一个简单的脚本来仅通过一个操作完成所有这些操作,但是今天我发现了一个重大缺陷:如果我未能输入新密码(例如,当它要求您重复选择时输入不同的字符串),则显然不会创建存档,因为 gpg 会给出错误消息,但脚本会更进一步,删除您的新文本文件,而它已经在第一个操作中删除了旧存档。

该脚本实际上如下:

rm $1.gpg
gpg -c $1
rm $1

我怎样才能避免这种情况,进入一个计数 gpg 错误消息的控制循环,识别何时出现问题并且未创建新的档案?

我知道我可以删除第一行,但我想避免每次都对覆盖消息回答“是”,因为我知道存档已经存在。此外,如果发生某些错误,我想保留更新的文本文件而不是旧存档,因为我不想再次修改文件并重复编辑(无论如何,在此期间我可能已经忘记了它)。

答案1

如果gpg在发生错误时返回非零退出代码,则可以检查这一点。要尝试,请运行命令gpg,获取错误条件,然后(假设bash)输入echo $?。如果输出不是,则仅当前面的命令(在本例中)成功时0才会执行以下rm命令:gpg

if [[ $? -eq 0 ]] ; then
    rm "$1"
fi

或者,您可以确保该文件在文本文件.gpg之前存在。rm

if [[ -f "$1.gpg" ]] ; then
    rm "$1"
else
    echo "$1.gpg not found, keeping the text file"
fi

当然,你可以结合这两种方法,确保gpg成功另一个文件存在。

请注意,您应该引用任何变量的使用(参见我的代码作为示例),否则您的脚本在文件名包含空格时会表现得很奇怪。

相关内容