Olá, Arkanon. Dá uma olhada no script abaixo:
http://www.vivaolinux.com.br/script/feet.sh-pseudo-screensaver-em-bash Já testei fazer o que queres duplicando a linha que chama a função feet: ..... 44 feet & 45 feet & <----- rodando uma "segunda instância" da função 46 read -rs -n 1 47 echo -e "\e[m" 48 setterm -reset 49 clear 50 pkill feet Mas o resultado é "meia boca", vez em quando alguns caracteres são escritos na posição errada. Se achares uma solução melhor, poste aqui. T+ Valtoir 2009/9/15 Arkanon <[email protected]> > > > Boa tarde. > > Em 1993, no CESUP (Centro de Super Computacao) da UFRGS havia uma sala > com alguns computadores (Mac e 486 com DOS) a disposicao de eventuais > usuarios. Havia tambem um terminal preto e branco sempre rodando um > screensaver em modo texto que era (pelo que lembro) um conjunto de > caracteres cuja tonalidade ficava variando aleatoriamente. > > Muitas vezes ja procurei um screensaver para terminal equivalente, mas > como nunca soube o nome do original, nem a linguagem em que foi feito > ou mesmo o SO em que rodava, todas as minhas buscas foram em vao. > > Hoje, pensando novamente no assunto, resolvi tentar produzir algo > semelhante em shell script, supondo que a complexidade nao deva ser > muito grande. > > O mais perto que consegui chegar foi o resultado abaixo. > > Se eu executar o algoritmo para UM UNICO caracter (quant=1), funciona > satisfatoriamente. O problema aparece quando tento por mais de um > simultaneamente na tela, que eh o que realmente deve acontecer. > > Como as variacoes de tonalidade dos varios caracteres deve ser > independente, aparentemente acontece em alguns momentos de 2 ou mais > caracteres tentarem ser reescritos ao mesmo tempo e o cursor "se > perder" na tentativa e um deles acabar sendo reescrito ao lado do > outro caracter, e nao na posicao original. Isso acaba com a sequencia > de variacao de tom daquele caracter, e, ao fim do loop, ele acaba > "sobrando" na tela, ao inves de ser escrito em preto (= apagado). > > Alguem tem alguma ideia de procedimento para lancar varios processos > independentes de escrita em tempos aleatorios que possam sofrer esse > tipo de concorrencia (escrita na tela em posicoes diferentes ao mesmo > tempo)? > > Eu poderia fazer um loop onde eu fosse controlando em arrays > aleatoriamente os caracteres e sequencialmente suas tonalidades, mas > isso so se nao houver uma forma mais magica (tipo com named pipes ;-p) > > Valeu. > > [BOT] > #!/bin/bash > > clear > tput civis # torna o cursor invisivel > set -o noglo # desabilita o caracter coringa * > > quant=3 # quantidade de caracteres simultaneamente na tela > maxwait=1.25 # maximo tempo de espera entre as variacoes de > tonalidade da cor do texto > charset=(* O o + - : .) # caracteres a serem pegos aleatoriamente > > black=0 > white=7 > L=`tput lines` # numero de linhas do terminal > C=`tput cols` # numero de colunas do terminal > > write() > { > tput sgr0 # restaura os atributos do texto > tput $5 # estilo do texto \ variacao da tonalidade > tput setf $4 # cor de frente do texto / da cor do texto > tput cup $2 $3 # move cursor para (linha,coluna) > echo -n "$1" # escreve o caracter > sleep `echo "$RANDOM%$maxwait" | bc` # espera uma quantidade > aleatoria de tempo entre 0 e maxwait > } > > seq $quant | while read > do > ( > s=${charset[$[$RANDOM%${#charset[*]}]]} # escolhe aletoriamente um > caracter de charset > l=$[$RANDOM%$L] # escolhe uma linha aleatoria entre 0 e a > altura do terminal > c=$[$RANDOM%$C] # escolhe uma coluna aleatoria entre 0 e a > largura do terminal > write $s $l $c $white bold > write $s $l $c $white dim > write $s $l $c $black bold > write $s $l $c $black dim > ) & > done > > read # espera um enter para restaurar as condicoes originais do terminal > > set +o noglob # habilita o caracter coringa * > tput cnorm # torna o cursor visivel > tput sgr0 > [EOT] > > -- > (o_ ------------------ __o > //\ [email protected] <arkanon%40lsd.org.br> _`\<, > V_/_ --- www.lsd.org.br (_)/(_) > --------------------------------- > > [As partes desta mensagem que não continham texto foram removidas]
