我有一個文字文件,其中保存了所有重要的個人數據,例如所有帳戶的密碼和信用卡的 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
成功和另一個文件存在。
請注意,您應該引用變數的任何使用(請參閱我的程式碼作為範例),否則您的腳本對於包含空格的檔案名稱會表現得很奇怪。