Trabajar con archivos que contienen espacios puede ser un dolor de cabeza con bash.
Aquí dejo un ejemplo de como hacerlo.
En este ejemplo vamos a buscar los archivos que subversion nos indica que han sido modificados:
# Se definie el fin de linea como el separador entre parámetros DIFS="$IFS" ; IFS=$'\n' echo for x in $(svn status | grep ^M | awk -v FS='M ' '{printf "\n%s",$2}') ; do echo - "$x" parametros="$parametros '$x'" done IFS="$DIFS" echo read -n 1 -s -p 'Añadir (s/n): ' OPCION if [ "$OPCION" = 's' ] ; then cmd="$cmd $parametros" ; eval $cmd fi
Añadimos en un array los archivos recibidos:
declare -a e_archivos_seleccionados=() c=0 while [ -n "$1" ]; do echo - "$c) $1" e_archivos_seleccionados[$c]="$1" shift 1 let c=c+1 done
Añadimos lista de archivos a base de datos:
for c in `seq 0 ${#e_archivos_seleccionados[*]}` ; do x="${e_archivos_seleccionados[$c]}" echo "- $x" # Comprobar que no este ya en la base de datos SQL="SELECT nombre from rMovimientoArchivos WHERE nombre='$x' AND idMovimiento=$movimientoId" SALIDA=`ejecutarSQL "$SQL" "-N"` if [ "$SALIDA" != "$x" ] ; then SQL="INSERT INTO rMovimientoArchivos VALUES ($movimientoId,'$x')" ejecutarSQL "$SQL" if [ "$?" != "0" ] ; then mensajes "Archivo: $x no fue añadido a movimiento: $movimientoId" else mensajes "Archivo: $x añadido a movimiento: $movimientoId" fi fi done
Pasar un array de archivos a un comando colocando comillas para que no de problemas.:
parametros="$(for n in `seq 0 $((${#aSALIDA[*]}-1))` ; do echo -n "'${aSALIDA[$n]}' " ; done)" cmd="$mt_editor_dev $parametros" eval "$cmd"