Observe que ~ é expandido pelo shell para o valor de ${HOME} , não é possível inserir isso como entrada para um programa e esperar que ele seja traduzido automaticamente para ${HOME} (a menos que você o especifique como um opção de linha de comando para o programa, o que dá ao shell uma chance de realizar a substituição).
Se você quiser gravar no diretório inicial, poderá fazer com que seu programa procure a variável de ambiente ${HOME} . Então, quem quer que seja, e onde quer que esteja em casa, você terá a resposta certa.