~ não parece estar se expandindo corretamente. Quando executo seu script com um caminho intencionalmente falso, o erro não diz ~ , mas expande o caminho (ou seja, /home/sparhawk/fakepath não ~/fakepath . Você pode tentar usar $HOME em vez de ~ ou usar o caminho completo no script.
(Não tenho certeza porque ~ não funciona no seu sistema, pois seu script funciona bem para mim.)