Script simples de atualização do bash gpg

0

Eu tenho um arquivo de texto no qual eu salvo todos os meus dados pessoais importantes, como as senhas de todas as minhas contas e os PINs dos meus cartões de crédito, caso eu os esqueça. Obviamente, esse arquivo precisa ser criptografado, então eu recorri ao gpg (GNU Privacy Guard).

O problema é que, de vez em quando, devo reabrir o arquivo não apenas para leitura, como recuperar uma senha que esqueci, mas também para escrever, como anotar a senha de uma nova conta que fiz em um novo site . Depois, preciso excluir o arquivo antigo, criar um novo arquivo a partir do arquivo de texto atualizado e excluir o arquivo de texto.

Eu fiz um script simples para fazer tudo isso em apenas uma ação, mas acabei encontrando uma grande falha hoje: se eu não conseguir digitar uma nova senha (como digitar uma string diferente quando ela pede para você repetir a sua escolha), o arquivo, obviamente, não será criado, como o gpg dará uma mensagem de erro, mas o script irá mais longe, excluindo seu novo arquivo de texto, quando ele já tiver excluído o arquivo antigo como primeira ação.

O script é, na verdade, o seguinte:

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

Como posso evitar isso, digitando um ciclo de controle que conta a mensagem de erro gpg, reconhecendo quando algo deu errado e o novo arquivo não foi criado?

Eu sei que posso apenas remover a primeira linha, mas gostaria de evitar responder "sim" à mensagem de substituição toda vez que sei que o arquivo já existe. Além disso, eu gostaria de manter o arquivo de texto atualizado em vez do antigo arquivo se algum erro ocorrer, já que eu não quero modificar o arquivo outra vez repetindo a edição (eu poderia ter esquecido enquanto isso).

    
por Jeffrey Lebowski 22.12.2013 / 20:42

1 resposta

1

Se gpg retornar um código de saída diferente de zero quando ocorrer um erro, você poderá verificar isso. Para tentar, execute o comando gpg , obtenha uma condição de erro e, em seguida, (assumindo bash ), insira echo $? . Se a saída não for 0 , o seguinte só executará rm se o comando anterior (neste caso gpg ) tiver sido bem-sucedido:

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

Como alternativa, você pode verificar se o arquivo .gpg existe antes de você rm do arquivo de texto.

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

Você poderia combinar as duas abordagens, certificando-se de que gpg teve sucesso e o outro arquivo existe.

Note que você deve citar qualquer uso de variáveis (veja meu código como exemplo), caso contrário, seu script se comportará de maneira estranha com nomes de arquivo contendo, por exemplo, espaços.

    
por 22.12.2013 / 23:55