GnuPG behaives differently with regard to a non-existing GnuPG home directory, depending on whether or not the specified path resolves to something ending with ".gnupg" or not.
Case 0: No home directory specified
jolson@senkommen:~$ [ -e ~/.gnupg ] && echo exists || echo does not exist does not exist jolson@senkommen:~$ gpg -k gpg: directory '/home/jolson/.gnupg' created gpg: new configuration file '/home/jolson/.gnupg/dirmngr.conf' created gpg: new configuration file '/home/jolson/.gnupg/gpg.conf' created gpg: keybox '/home/jolson/.gnupg/pubring.kbx' created gpg: /home/jolson/.gnupg/trustdb.gpg: trustdb created
Case 1: Same result when a home directory is specified and it ends with ".gnupg"
jolson@senkommen:~$ [ -e ~/.config/.gnupg ] && echo exists || echo does not exist does not exist jolson@senkommen:~$ GNUPGHOME=~/.config/.gnupg gpg -k gpg: directory '/home/jolson/.config/.gnupg' created gpg: new configuration file '/home/jolson/.config/.gnupg/dirmngr.conf' created gpg: new configuration file '/home/jolson/.config/.gnupg/gpg.conf' created gpg: keybox '/home/jolson/.config/.gnupg/pubring.kbx' created gpg: /home/jolson/.config/.gnupg/trustdb.gpg: trustdb created
Case 2: Different result if some other home directory path is specified
jolson@senkommen:~$ [ -e ~/.config/gnupg ] && echo exists || echo does not exist does not exist jolson@senkommen:~$ GNUPGHOME=~/.config/gnupg gpg -k gpg: keyblock resource '/home/jolson/.config/gnupg/pubring.kbx': No such file or directory gpg: Fatal: /home/jolson/.config/gnupg: directory does not exist!
Case 3: Yet another result if the home directory path ends with ".gnupg", but there is a directory earlier in the path that does not exist
jolson@senkommen:~$ GNUPGHOME=~/.config/gnupg/.gnupg gpg -k gpg: Fatal: can't create directory '/home/jolson/.config/gnupg/.gnupg': No such file or directory
To me, expected behaviour would be that case 0, case 1, case 2, and probably also case 3 did the same thing.
Furthermore, if the would-be home directory already exists, the behaviour also differs depending on whether or not a home directory is specified or left implicit:
Case 4: Gives no error, but the result differs unexpectedly from that of case 0
jolson@senkommen:~$ mkdir --mode 700 .gnupg jolson@senkommen:~$ gpg -k gpg: keybox '/home/jolson/.gnupg/pubring.kbx' created gpg: /home/jolson/.gnupg/trustdb.gpg: trustdb created