2010/11/13 rantis cares <rantisca...@gmail.com>: > El día 13 de noviembre de 2010 15:35, Marc Aymerich > <glicer...@gmail.com> escribió: >> 010/11/13 rantis cares <rantisca...@gmail.com>: >>> El día 13 de noviembre de 2010 13:03, rantis cares >>> <rantisca...@gmail.com> escribió: >>>> El día 13 de noviembre de 2010 12:49, Camaleón <noela...@gmail.com> >>>> escribió: >>>>> El Sat, 13 Nov 2010 11:54:27 -0600, rantis cares escribió: >>>>> >>>>> Te lo marco como OT para que no se nos enfaden... >>>> >>>> ¿Que es eso de que me lo marques como OT para que no se enfaden? >>>> >>>>> >>>>>> Quiero contar el numero de caracteres mediante un script en bash pero >>>>>> cada vez que ingrese un caracter, que lo vaya contando en tiempo real. >>>>>> El comando wc lo hace, pero cuando existe un archivo y no es en tiempo >>>>>> real. >>>>>> >>>>>> yo quiero hacer algo así: >>>>>> >>>>>> #!/bin/bash >>>>>> >>>>>> echo "Contare los caracteres como los vas ingresando" >>>>>> read -p "Contador: " >>>>> >>>>> Sí, con wc... ¿por qué no? >>>>> >>>>> #!/bin/bash >>>>> >>>>> echo "Contare los caracteres como los vas ingresando" >>>>> echo "Contador: " >>>>> read conta >>>>> echo -n $conta | wc -m >>>>> >>>>> Sólo te queda pulirlo un poco para que admita la introducción de retornos >>>>> de carro y añadir el factor "tiempo real" (quizá debas tirar de ncurses >>>>> para pintar una pantalla con dos campos, uno para la introducción de >>>>> datos y otro que vaya mostrando el contenido del contador) ;-P >>>> >>>> Me gusto un poco, la verdad es que yo quisiera que lo mostrara en >>>> tiempo real. La verdad es que no estoy usando ncurses, me gustaria >>>> todo muy sencillo, en bash. >>>> >>>> Claro que no voy a escribir muchos caracteres, pero si creo que hare >>>> un pequeño bucle para conseguir lo que quiero y algunas condiciones >>>> como >>>> >>>> maximo=(igual o menor que)50 >>>> >>>> >>>> >>>> if $texto cumple esta condicion $maximo >>>> entonces que ejecute la accion >>>> finaliza >>>> >>>> sino >>>> entonces que se repita el ingreso del texto >>>> >>>> Gracias >>>> >>>> P.D. Yo no sabia que no eras Camaleón, sino que eres Camaleona :D >>>> >>> >>> Bien he realizado el script para contar los caracteres, tal vez no en >>> tiempo real, pero para pequeños ingresos de texto que funcionen. >>> >>> Si alguno tiene una mejor idea, o alguna sugerencia que pudiera hacer >>> que se viera en tiempo real, se los agradecere. >>> >> >> #!/bin/bash >> while read -n1 c; do >> a="$a$c" >> echo -en "\r$a "$(($(echo $a|wc -c) -1)); >> done >> > > Marc: > > Cuando copie el codigo y vi los resultados, la verdad es que me gusto > la manera de resolver este problema, me parecio genial, de hecho me > puse a reir por la genialidad de la respuesta. > > Solo que al estar aprendiendo, no se que tanto sigjifica esto, pero > funciona a medias, te diré porque: > > 1. No me acepta los espacios, tengo que poner la barra inversa \ y > posteriormente tengo que presionar la barra espaciadora. > 2. Si me equivoco, no puedo borrar y ademas cada que presiono la tecla > delete, me lo cuenta como un caracter. > 3. Cuando llega al final de la pantalla, vuelve a escribir todo y > dicha pantalla se llena del mismo mensaje cada vez que escribo un > nuevo caracter hasta que termina pareciendose una piramide. > > Decir esto, no significa que no valore el script, quisiera yo tener el > conocimiento para desarrollar la genialidad con la que contaste los > caracteres. > > Agradeceria si me ayudaras a resolver estos "inconvenientes", y aun si > no lo hicieras, creo que ya hiciste mucho, en lo que a mi corresponde > me pondre a investigar porque me has mostrado el camino para llegar a > donde quiero llegar. > > Gracias > > P.D. Acepto mas sugerencias >
rantis, para el espacio puedes solucionarlo así: while IFS= read -r -n1 c; do .... Para finalizar cuando pulsas enter tendrías que poner algo parecido a esto al principio del bucle: if [ "$c" == "$(echo)" ]; then break; fi Hasta aquí y sumando las mejoras de javier :) tendriamos esto: while IFS= read -r -n1 c; do if [ "$c" == "$(echo)" ]; then break; fi a="$a$c" echo -en "\r$a "$(($(echo $a|wc -c) -1)); done 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 :) . saludos. -- Marc -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/aanlktimfgiy3nc1bk0rnq9-nccv1dfvmmfv1sbstz...@mail.gmail.com