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.