간단한 bash gpg 업데이트 스크립트

간단한 bash gpg 업데이트 스크립트

나는 모든 계정의 비밀번호, 신용카드의 PIN 등 모든 중요한 개인 데이터를 잊어버릴 경우를 대비해 저장하는 텍스트 파일을 가지고 있습니다. 분명히 해당 파일은 암호화되어야 하므로 gpg(GNU Privacy Guard)를 사용했습니다.

문제는 잊어버린 비밀번호를 복구하는 등 읽기 위해서뿐만 아니라 새 사이트에서 만든 새 계정의 비밀번호를 적는 등 쓰기 위해서도 가끔씩 파일을 다시 열어야 한다는 것입니다. 그런 다음 이전 아카이브를 삭제하고 업데이트된 텍스트 파일에서 새 아카이브를 만든 다음 텍스트 파일을 삭제해야 합니다.

이 모든 작업을 한 번의 작업으로 수행하기 위한 간단한 스크립트를 만들었지만 오늘 중대한 결함을 발견했습니다. 새 비밀번호를 입력하지 않으면(예: 선택을 반복하라는 메시지가 표시될 때 다른 문자열을 입력하는 경우) 아카이브가 gpg는 오류 메시지를 표시하므로 생성되지는 않지만 스크립트는 더 나아가서 첫 번째 작업으로 이전 아카이브를 이미 삭제한 경우 새 텍스트 파일을 삭제합니다.

실제로 스크립트는 다음과 같습니다.

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

gpg 오류 메시지를 계산하는 제어 주기를 입력하고 문제가 발생하여 새 아카이브가 생성되지 않은 시기를 인식하여 이를 방지하려면 어떻게 해야 합니까?

첫 번째 줄만 제거할 수 있다는 것을 알고 있지만 아카이브가 이미 존재한다는 것을 알고 있기 때문에 덮어쓰기 메시지에 매번 '예'라고 대답하는 것을 피하고 싶습니다. 또한 오류가 발생하는 경우 이전 아카이브 대신 업데이트된 텍스트 파일을 유지하고 싶습니다. 다시 편집을 반복하면서 파일을 수정하고 싶지 않기 때문입니다(어차피 그 동안 잊어버렸을 수도 있습니다).

답변1

gpg오류 발생 시 0이 아닌 종료 코드를 반환하는 경우 이를 확인할 수 있습니다. 시도하려면 gpg명령을 실행하고 오류 조건을 얻은 다음 (가정 bash) Enter 를 입력하십시오 echo $?. 출력이 가 아닌 경우 이전 명령(이 경우 )이 성공한 경우 0에만 다음이 실행됩니다 .rmgpg

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성공할 수 있습니다.그리고다른 파일이 존재합니다.

변수의 사용을 인용해야 한다는 점에 유의하십시오(예로 내 코드 참조). 그렇지 않으면 스크립트가 공백 등을 포함하는 파일 이름으로 인해 이상하게 동작할 것입니다.

관련 정보