Erro no comando do comando Play

3

Eu tenho um script de shell no meu diretório /bin que tem uma linha: play applause.mp3 . O arquivo applause.mp3 está colocado no mesmo diretório que o executável.

No entanto, o comando play me dá o erro play FAIL formats: can't open input file 'applause.mp3': No such file or directory .

O arquivo é reproduzido corretamente se eu abri-lo diretamente do diretório /bin . É óbvio que o arquivo .mp3 precisa residir em algum lugar diferente do diretório /bin . Onde o bash vai procurar um arquivo?

    
por SJG 22.02.2016 / 00:54

2 respostas

0

O Bash procura comandos para executar em diretórios especificados na variável de ambiente PATH .

No entanto, no seu cenário, o bash já fez seu trabalho e executou o comando play . applause.mp3 é passado como argumento. É totalmente até play comando como ele interpreta.

Em um cenário comum em que um comando recebe um argumento filename, ele analisará o caminho a partir do diretório atual (e é por isso que funcionou quando você alterou o diretório para /bin antes de chamar o script).

Para evitar problemas, você deve usar um caminho absoluto (começando com / ) em seu argumento.

    
por 22.02.2016 / 01:24
0

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.

    
por 23.02.2016 / 02:09