Os programas não procuram arquivos de dados do usuário no diretório onde o executável está localizado¹. Às vezes, eles procuram arquivos de configuração ou arquivos de dados estáticos no mesmo diretório (mas não é muito comum). Mas os dados do usuário e os programas instalados quase nunca estão nos mesmos diretórios - os programas geralmente estão nos diretórios do sistema, onde os usuários não têm permissão para escrever, e os arquivos dos usuários geralmente estão em seus diretórios pessoais.
Quando você passa um nome de arquivo para um programa, ele é interpretado como um nome de arquivo no diretório de trabalho atual . Todo processo possui um diretório de trabalho atual e faz parte do ambiente do processo, não associado a um programa específico. Você normalmente inicia em seu diretório inicial e pode usar o comando shell cd para ir para outro diretório. Qualquer programa iniciado a partir do shell herda o diretório atual do shell.
Quando você executa play applause.mp3 , isso procura um arquivo chamado applause.mp3 no diretório atual. O diretório em que o executável play está localizado é irrelevante.
Se você quiser usar um nome de arquivo que funcione, não importa qual seja o diretório atual, passe um nome de arquivo absoluto (começando com / ). Em um script de shell ou na linha de comando, você pode usar a abreviação ~ no início para referir-se ao seu diretório pessoal. Por exemplo, play ~/music/applause.mp3 runs play no arquivo chamado applause.mp3 localizado no subdiretório chamado music do seu diretório pessoal.
¹ Eles podem, mas dificilmente o fazem.