No meu script Bash eu tenho que lidar com nomes de arquivos com espaços. Estas são as linhas importantes dentro do meu script:
mp3file="/media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3"
echo "Command: mp3info -x `echo $mp3file`"
mp3info -x `echo $mp3file`
Infelizmente, o comando não funciona, porque o nome do arquivo é dividido:
mp3info: invalid option -- '\'
mp3info: invalid option -- '\'
Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\: No such file or directory
Error opening MP3: Vol.5\: No such file or directory
Error opening MP3: \[MP3PRO\]/01\: No such file or directory
Error opening MP3: Nofx\: No such file or directory
Error opening MP3: Pump\: No such file or directory
Error opening MP3: up\: No such file or directory
Error opening MP3: the\: No such file or directory
Error opening MP3: Valium.mp3: No such file or directory
Eu também tentei adicionar um IFS personalizado como eu li em alguns fóruns:
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
# Script like above
IFS=$SAVEIFS
Mas assim, estou recebendo o erro
Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3: No such file or directory
Eu tentei um bom tempo agora, mas não consigo fazer meu script funcionar. O que é estranho é que, se eu estou executando o mesmo comando que meu script deve criar manualmente (ecoando-o dentro do meu script) no Shell, ele realmente funciona. Mas não dentro do meu roteiro. Alguma dica?
IFS
é suposto fazer (não importa sobre o retrocesso, eu só percebi que poderia ser qualquer personagem e ele está lá para preservar a nova linha que de outra forma obter caiu), mas você pode definirIFS
sem o usoecho
:IFS=$'\n'
. Além disso, em um lugar você está usando backticks e outro que você está usando$()
. A$()
forma é preferida, uma vez que é mais legível, pode ser facilmente aninhado, etc