Script bash sin sentido
Jesús GS || Blaxter
blaxter en gmail.com
Sab Dic 3 17:51:33 GMT 2005
On 03/12/05, Alejandro Riveira Fernández <iinarf00 en ucv.udc.es> wrote:
> El sáb, 03-12-2005 a las 16:53 +0100, Jesús GS || Blaxter escribió:
> > Hola,
> > llevo un rato atascado en un fallo que me da un script que estoy
> > haciendo y la verdad no le veo sentido alguno, a ver si alguien ve el
> > fallo, me explico:
>
> mejor explicación sería el script completo y con que parametros
> lo llamas...
personalmente siempre prefiero que me describan el problema concreto a
que me peguen codigo y ya esta, pero bueno no problem :). aqui va
>
> >
> > el script consiste en usar lame (compresor mp3), entonces todo va bien
> > y el script intenta ejecutar algo del tipo:
> > lame $parametros $fichero_in $fichero_out
> > esto falla y el lame se me queja diciendo esto:
> > lame: excess arg 13-audioslave-getaway.mp3 (el
> > "13-audioslave-getaway.mp3" es $fichero_out, ultimo parámetro)
> >
> > pero ahora cambio la linea anterior por algo del tipo:
> > echo "lame $parametros $fichero_in $fichero_out"
> > y al ejecutarlo veo lo que ejecutaba el script antes, teóricamente si
> > copypasteo eso debería salirme el mismo error. Lo copypasteo en la
> > consola y funciona correctamente O_o.
> >
> > Y el sentido?. el comando con sus parámetros en total ocupa 163
> > caracteres, hay un máximo de caracteres por comando cuando se ejecuta
> > un script?, 160 me parecen pocos...
> >
> > Voy a seguir probando y buscando, pero por si alguno le ha pasado algo
> > anteriormente parecido se agradece alguna ayudita ;). salu2
> >
> --
Pongo en situacion de nuevo, quiero codificar mp3 a calidad inferior y
asi que ocupen menos espacio, primero he intentado hacerlo en bash
pero me he atascado con esto y al final lo he hecho en perl, muchas
menos lineas y funcionando a la primera, pero me mosquea que esto no
vaya. Aqui va el codigo (todas las funciones primeras se pueden
ignorar pues son para pillar los id3s nada mas):
____________________________________________________________________-
#!/bin/bash
# for VBR
MIN_B=96
MAX_B=160
# for CBR
B=128
# CBR or VBR
MODO="CBR"
################################################################################
################################################################################
function InfoId3(){
dato="$(tagmp3 show $1 | grep $2 | cut -c 14-)"
res="$(escapa "${dato}")"
if [ "$res" = "" ]; then
echo "_"
else
echo "$res"
fi
}
function Artist(){
echo "$(InfoId3 $1 "Artist")"
}
function Title(){
echo "$(InfoId3 $1 "Title")"
}
function Album(){
echo "$(InfoId3 $1 "Album")"
}
function Track(){
echo "$(InfoId3 $1 "Track")"
}
function Year(){
echo "$(InfoId3 $1 "Year")"
}
function Genre(){
genero="$(InfoId3 $1 "Genre")"
echo "$(lame --genre-list | grep -e "[0-9] ${genero}$" | cut -b -3)"
}
function Comment(){
echo "$(InfoId3 $1 "Comment")"
}
################################################################################
function escapa(){
echo "$(echo "$1" | sed -e 's/ /\\ /g')"
}
################################################################################
function DameId3(){
A="--tt $(Title $1) --ta $(Artist $1) --tl $(Album $1) --ty $(Year $1)"
echo "$A --tc $(Comment $1) --tn $(Track $1)" --tg $(Genre $1)
}
################################################################################
################################################################################
ls *.mp3 2> /dev/null > /dev/null
if [ $? -ne 0 ]; then
echo "No hay mp3s"
exit
fi
for Archivo in *.mp3 ; do
ID3s=$(DameId3 $Archivo)
case "$MODO" in
"CBR" ) PARAMETROS="-b ${B}";;
"VBR" ) PARAMETROS="-v -b ${MIN_B} -B ${MAX_B}";;
* ) print "Modo invalido! pon en las variables del script CBR o VBR!"
exit 1 ;;
esac
echo "lame $PARAMETROS $ID3s $(escapa "${Archivo}") $(escapa
"${Archivo}.new") > /dev/null 2> /dev/null"
if [ "$?" -ne 0 ]; then
echo "ERROR";
exit;
fi
# mv "${Archivo}.new" "${Archivo}"
done
________________________________________________________________
ahí esta con el "echo", lo ejecuto y me salen tantas lineas como mp3
en el directorio, por ejemplo :
lame -b 128 --tt Show\ me\ how\ to\ live --ta Audioslave --tl
Audioslave --ty 2002 --tc _ --tn 2 --tg 79
02-audioslave-show_me_how_t.mp3 02-audioslave-show_me_how_t.mp3.new >
/dev/null 2> /dev/null
ok, ejecutamos lo anterior y funciona sin problemas. Quitamos el echo
"lame...." para que lo ejecute el script y sale lo que decía en el
primer correo. inquietante...
Más información sobre la lista de distribución ubuntu-es