I donโt understand why you are unhappy with the solution that you have already come up with, but if for some reason you really want to avoid clutter with your keywords, I can offer something else:
gtmp=$(mktemp -d) gpg --homedir $gtmp --import key gpg --homedir $gtmp --export key > pub.gpg rm -rf $gtmp
Or as a convenient BASH function:
# Requires keyfile as 1st argument; optional 2nd argument is output file gpg_priv_to_pub(){ g=$(mktemp -d) infile=$1 [[ $# > 1 ]] && outfile=$2 || outfile=${1%.*}_pub.gpg gpg --homedir $g --import "$infile" 2>/dev/null KEYID=$(gpg --homedir $g -k --with-colons | awk -F: '/^pub/{print $5}') gpg --homedir $g --export $KEYID > "$outfile" rm -rf $g echo "Public key $KEYID extracted from '$infile' and saved to '$outfile'" }
source share