Haz nevar en la consola

Esto que les voy a mostrar no es mas que una curiosidad y un poco de diversion.

Un pequeño script que hara caer nieve en la consola de linux.

bin bash consola linux

Los pasos a seguir son:

  1. Crear un archivo llamado ‘nieve’ con el contenido que les muestro
  2. En la consola escribir chmod +x nieve
  3. Y luego ejecutar asi: sh nieve

Aqui el script

#!/bin/bash

LINES=$(tput lines)
COLUMNS=$(tput cols)

declare -A snowflakes
declare -A lastflakes

clear

function move_flake() {
i=”$1″

if [ "${snowflakes[$i]}” = “” ] || [ "${snowflakes[$i]}” = “$LINES” ]; then
snowflakes[$i]=0
else
if [ "${lastflakes[$i]}” != “” ]; then
printf “\033[%s;%sH \033[1;1H " ${lastflakes[$i]} $i
fi
fi

printf “\033[%s;%sH❄\033[1;1H" ${snowflakes[$i]} $i

lastflakes[$i]=${snowflakes[$i]}
snowflakes[$i]=$((${snowflakes[$i]}+1))
}

while :
do
i=$(($RANDOM % $COLUMNS))

move_flake $i

for x in “${!lastflakes[@]}”
do
move_flake “$x”
done

sleep 0.1
done

Si no les llega a funcionar es casi seguro que el problema son las comillas. Escribanlas a mano a todas.

Curioso verdad?

perro

Ingeniero en Informática. Programador en PHP y Angular. Lo que mas adoro en el mundo es el conocimiento. Y el anime....y Japón...y el running...y bloguear claro y algunas otras cientos de cosas. Sigo buscando la manera de hacer mi primer millón.

9
Comenta!

avatar
Daniel
Daniel

me marca el siguiente error a la hora de correr el archivo

nieve: 6: declare: not foundnieve: 7: declare: not foundnieve: 11: Syntax error: «(» unexpected

simplemente copie y pegue

Aguacate Kun

me dice lo mismo :S

nieve: 6: declare: not foundnieve: 7: declare: not foundnieve: 11: Syntax error: «(» unexpected

Aguacate Kun

bueno no pude resolver el problema pero vi en otra página {http://www.climagic.org/coolstuff/let-it-snow.html} que había un script para pegarlo en la consola directamente:

clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|gawk ‘{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf «33[%s;%sH «,o,x;printf «33[%s;%sH*33[0;0H»,a[x],x;}}’

en el cual se pone como requisito instalar gawk:

sudo apt-get install gawk

el cual probe y funcionó :)

Giovanni Escobar Sosa
Giovanni Escobar Sosa

Luego de cambiarle las comillas (buscándolas) me di cuenta que hay tres diferentes “ ” y ″. Ya cambiadas, en Ubuntu la instrucción $sh nieve no funcionó (nieve: 11: Syntax error: «(» unexpected). Pero ya que se le dio que fuera ejecutable con chmod, probé con $./nieve y listo. Muy curioso. Lo único malo fue que se generaron unas líneas un tanto aleatorias. Por otro lado, decir para cualquier novato aventurero (como yo), que una forma de pararlo es Ctrl-c. Y para limpiar la terminal con $clear

sefsinalas

Todos los errores que han tenido son por las comillas. Deben escribirlas a mano

e2391

Interesante! Otro script que puedo usar de screensaver para la consola :)

Saludos!

Daniel
Daniel

si alguien quiere el script ya con las comillas reemplazadas:

#!/bin/bashLINES=$(tput lines)COLUMNS=$(tput cols)declare -A snowflakesdeclare -A lastflakesclearfunction move_flake () {i=»$1″if [ «${snowflakes[$i]}»= «» ] || [ «${snowflakes[$i]}» = «$LINES» ]; thensnowflakes[$i]=0elseif [ «${lastflakes[$i]}» != «» ]; thenprintf «33[%s;%sH 33[1;1H » ${lastflakes[$i]} $ififiprintf «33[%s;%sH❄33[1;1H» ${snowflakes[$i]} $ilastflakes[$i]=${snowflakes[$i]}snowflakes[$i]=$((${snowflakes[$i]}+1))}while :doi=$(($RANDOM % $COLUMNS))move_flake $ifor x in «${!lastflakes[@]}»domove_flake «$x»donesleep 0.1done

El Master
El Master

#!/bin/bash
#Les comparto el mio ya no hay que corregir nada

LINES=$(tput lines)
COLUMNS=$(tput cols)

declare -A snowflakes
declare -A lastflakes

clear

function move_flake() {
i=»$1″

if [ «${snowflakes[$i]}» = «» ] || [ «${snowflakes[$i]}» = «$LINES» ]; then
snowflakes[$i]=0
else
if [ «${lastflakes[$i]}» != «» ]; then
printf «33[%s;%sH 33[1;1H » ${lastflakes[$i]} $i
fi
fi

printf «33[%s;%sH❄33[1;1H» ${snowflakes[$i]} $i

lastflakes[$i]=${snowflakes[$i]}
snowflakes[$i]=$((${snowflakes[$i]}+1))
}

while :
do
i=$(($RANDOM % $COLUMNS))

move_flake $i

for x in «${!lastflakes[@]}»
do
move_flake «$x»
done

sleep 0.1
done

sefsinalas

Muchas gracias, funciona bien