アカウントのパスワードやクレジットカードのPINなど、重要な個人データをすべて忘れてしまった場合に備えて保存するテキストファイルがあります。明らかに、そのファイルは暗号化する必要があるので、私はgpg(GNU Privacy Guard)に頼りました。
問題は、忘れたパスワードを回復するなどの読み取りだけでなく、新しいサイトで作成した新しいアカウントのパスワードを書き留めるなどの書き込みのためにも、ファイルを時々再度開かなければならないことです。次に、古いアーカイブを削除し、更新されたテキストファイルから新しいアーカイブを作成して、テキストファイルを削除する必要があります。
これらすべてを1つのアクションで実行する簡単なスクリプトを作成しましたが、今日、大きな欠陥が見つかりました。新しいパスワードの入力に失敗した場合(選択を繰り返すように求められたときに別の文字列を入力するなど)、アーカイブはgpgはエラーメッセージを表示するため、明らかに作成されませんが、スクリプトはさらに進んで、最初のアクションとして古いアーカイブをすでに削除している場合は、新しいテキストファイルを削除します。
スクリプトは実際には次のとおりです。
rm $ 1.gpg
gpg -c $ 1
rm $ 1
これを回避するにはどうすればよいですか。gpgエラーメッセージをカウントする制御サイクルに入り、問題が発生して新しいアーカイブが作成されなかったことを認識します。
最初の行を削除するだけでよいことはわかっていますが、アーカイブがすでに存在していることがわかっているので、上書きメッセージに毎回「はい」と答えるのは避けたいと思います。また、エラーが発生した場合は、古いアーカイブではなく更新されたテキストファイルを保持したいと思います。これは、ファイルをもう一度編集を繰り返して変更したくないためです(とにかく忘れてしまった可能性があります)。
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
成功し、他のファイルが存在することを確認することもできます。
変数の使用法を引用する必要があることに注意してください(例として私のコードを参照)。そうしないと、スクリプトは、スペースなどを含むファイル名で奇妙に動作します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加