En mi Bash-script tengo que manejar nombres de archivos con espacios. Estas son las líneas importantes dentro de mi 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`
Desafortunadamente, el comando no funciona, porque el nombre del archivo está 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
También intenté agregar un IFS personalizado mientras leía en algunos foros:
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
# Script like above
IFS=$SAVEIFS
Pero de esta manera, estoy recibiendo el error.
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
Lo intenté hace un tiempo, pero no consigo que mi script funcione. Lo que es extraño es que si ejecuto el mismo comando que mi script debería crear manualmente (haciéndolo eco dentro de mi script) en el Shell, realmente funciona. Pero no dentro de mi guión. ¿Alguna pista?
bash
bash-scripting
filenames
ifischer
fuente
fuente
IFS
se supone que debe hacer (no importa sobre el retroceso, me di cuenta de que podría ser cualquier personaje y está ahí para preservar la nueva línea que de lo contrario se eliminaría), pero puede configurarIFS
sin usoecho
:IFS=$'\n'
. Además, en un lugar estás usando backticks y en otro lugar estás usando$()
. los$()
Se prefiere la forma ya que es más legible, se puede anidar fácilmente, etc.Respuestas:
Envuelva los nombres de las variables entre comillas:
También quité lo superfluo
echo
Comandos y escapar que no es necesario.fuente