El día 13 de noviembre de 2010 16:37, Marc Aymerich <glicer...@gmail.com> escribió: > 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 >
Como lo comente anteriormente, se esta resolviendo el problema y cada vez la solucion esta mas cerca. Ahora con esta mejora la barra espaciadora ya es reconocida, ahora solo falta el borrado, que ya lo comence a estudiar y ademas la repeticion de todo el texto cuando llega al final y se vuelve a escribir una y otra vez. > 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 :) . > Esto es mucho mas sencillo que cuando comence, la respuesta esta cerca, la puedo oler, puedo ver funcionando este script cuenta caracteres jejeje. -- 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/aanlktinm1xmmtftj1a-qnvknvi7dz_7evwqajxyyv...@mail.gmail.com