Você pode fazer assim:
PROMPT_COMMAND='[[ $? == 0 ]] && history 1 | sed -r "s/\ +[0-9]+\ +//" >> successful'
$ PROMPT_COMMAND mantém um comando que o bash executa antes de emitir um prompt. Então, o que isto faz é avaliar o status de saída do seu comando anterior ( depois você pressiona enter para executar o comando atual, mas antes o bash o avalia ), e se foi bem sucedido, puxe-o de seu histórico bash, retire o número do comando e coloque-o em um arquivo separado.
Agora você não precisa acrescentar nada aos seus comandos:
echo "exits successfully and will be appended"
ehco "only ends up in bash history"
Observe que os comandos do histórico readline, !! e o resto de sua família, só funciona em shells interativos, você não pode usá-los em scripts.
Observe também que a opção -r é gnu sed, o bsd sed não o possui.