Re: [OT] Re: Contar caracteres en tiempo real
2010/11/15 Javier Barroso <javibarroso@gmail.com>:
> 2010/11/14 Marc Aymerich <glicerinu@gmail.com>:
>> 2010/11/14 Javier Barroso <javibarroso@gmail.com>:
>>> 2010/11/13 Marc Aymerich <glicerinu@gmail.com>:
>>>> Y Ahora para borrar tendrías que usar algo parecido a esto:
>>>>
>>>> if [ "$c" == "$(echo backspace)" ]; then a={$a%?}; fi
>>>>
>>>> Desgraciadamente esto ultimo no te va a funcionar, No se como hacer un
>>>> echo del carácter backspace !! :D Pero si logras comparar $c con
>>>> backspace ahí lo tienes :) .
>>>
>>> Puedes coger ese caracter con:
>>>
>>> backspace=$(echo -en '\b') al principio del script y luego usar
>>> "$backspace" para comparar
>>>
>>> Sigo sin tener un bash a mano para hacer la prueba oportuna, pero creo
>>> que podría funcionar como dice Marc
>>
>>
>> Buenas Javier, el carácter backspace es un poco puñetero. Yo estoy
>> probando con gnome-terminal y al parecer cuando pulsas backspace el
>> carácter que le llega a bash no es "\b" sino "\x7F". No se si las
>> otras terminales se comportan igual. Bueno que para que al menos a mi
>> me funcione tengo que hacer la comparación así:
>> if [ "$c" == "$(echo -ne "\x7F")" ]; then a=${a%?};
>>
>> y de ninguna otra manera he conseguido que funcione :(
>>
>>
>> Rantis prueba este código a ver que te parece:
>>
>> #!/bin/bash
>> while IFS= read -r -n1 c; do
>> if [ "$c" == "$(echo)" ]; then break; fi
>> if [ "$c" == "$(echo -ne "\x7F")" ]; then
>> a=${a%?};
>> echo -en "\r$a ${#a} "
>> else a="$a$c"
>> echo -en "\r$a ${#a}"
>> fi
>> done
>> echo "El string resultante es: $a"
>>
>> Por desgracia aún faltaría pulir unos caracteres desagradables que
>> aparecen al pulsar backspace.
>
> Se arregla con el -s en el read:
> cad=""
> while IFS= read -s -r -n 1 c; do
> if [[ "$c" == $(echo -e '\x7f') ]]; then cad=${cad%?}; else cad="$cad$c"; fi;
> printf "%-50s\r" "$cad [${#cad}]";
> done
Muy buena solución javier.
Con esto hemos llevado el comando read al limite, pocas opciones hemos
dejado para usar ;)
saludos.
--
Marc
Reply to: