[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Re: Contar caracteres en tiempo real



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

Saludos


Reply to: