Acesso direto ao conteúdo

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

 

Screensaver do filme Matrix em bash

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 20 de Setembro de 2009

Eu assino a lista Shell-Script, mantida por João Eriberto Mota Filho, que também é autor do livre Descobrindo o Linux.

Em uma das mensagens da semana passada, saiu uma discussão sobre um screensaver, em Bash, imitando a famosa tela do filme Matrix. O script foi escrito pelo Júlio Cezar Neves, e eu o reproduzo a seguir. Esta mensagem gerou uma discussão muito interessante, em que muitos dos assinantes sugeriram modificações e melhorias. Enfim, muito educativo.

matrix.sh

  #!/bin/bash
  
  trap "echo -e '\033[m0';clear;setterm -cursor on;exit" 2
  
  setterm -cursor off
  
  Chars="abcdefghijklmnopqrstuvxywzABCDEFGHIJKLMNOPQRSTUVXYWZ01234567890!@#$%¨&*()_-+=^~{}[];:?"
  clear
  while true; do
  lin=0
  [ ${#Cols[@]} -eq $(($(tput cols)-2)) ] && unset Cols
  while true; do
  COL=$((RANDOM%$(tput cols)))
  [ "${Cols[$COL]}" ] && continue
  Cols[$COL]=1
  break
  done
  COR="\e[3$((RANDOM%7+1));1m"
  while [ $lin -lt $(tput lines) ]; do
  Char=$(echo $Chars | cut -c$((RANDOM%86+1)))
  for i in `seq 1 5`;do
  Char1=$(echo $Chars | cut -c$i);sleep 0.000001
  tput cup $lin $COL; echo -en "\e[37;1m$Char1"
  done
  tput cup $lin $COL; echo -en "$COR$Char";sleep 0.0001
  let lin++
  done
  done

Download do código

Veja a relação completa dos artigos da coluna Cantinho do Shell

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir
  • Currently 3.06/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (251 votos)


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.

Opinião dos Leitores

Bruno Dias
14 Dez 2010, 15:28
Segue aqui o script com fontes japonesa, e algumas modiicaçẽs, espero que gostem..


#!/bin/bash

trap "echo -e '\033[m0';clear;setterm -cursor on;exit" 2

setterm -cursor off

Chars="歳 企 沢 与 援 施 井 違 鮮 監 環 審 欧 訴 被 渡 影 含 撃 佐 核 融 況 渉 響 突 請 攻 崎 督 催 及 湾 離 摘 郎 捜 超 療 捕 振 介 迎 販 献 幅 維 浜 彼 般 塁 邦 舞 遣 抗 雄 込 緊 換 占 廃 江 頼 僚 吉 途 踏 抜 壊 債 伸 爆 儀 継 闘 葬 避 普 逮 婚 齢 迫 浮 惑 崩 聴 脱 押 倒 了 患 締 執 絡 房 募 撤 払 削 措 載 昇 陣 為 遅 抑 択 秀 徴 弾 償 拠 香 更 拒 刑 塚 致 抱 繰 尾 描 恐 鈴 盤 項 喪 伴 懸 戻 巨 震 越 契 掲 躍 棄 触 邸 依 籍 汚 還 互 慮 枠 恵 露 沖 逃 緩 需 傾 購 充 緒 跡 駐 貢 却 端 紹 獲 併 徹 衝 焦 奪 雇 浦 替 析 譲 称 挑 誘 紛 促 慎 控 贈 握 俊 薄 渋 銃 携 奥 診 詰 託 撮 侵 括 掛 双 刺 到 駆 寝 透 津 壁 稲 裂 敏 是 排 裕 堅 盗 芝 綱 扱 顧 訟 戒 祉 誉 歓 勧 騒 閥 甲 縄 揺 免 既 薦 隣 悩 華 御 範 隠 哲 杉 釈 荒 硬 妥 威 豪 滞 微 隆 埋 症 暫 肝 喚 妙 袋 索 襲 吹 懇 柄 驚 麻 封 娘 剤 瀬 趣 陥 斎 貫 仙 慰 賢 旬 腕 兼 旨 即 柳 偽 較 覇 床 詳 抵 脅 柔 茂 犠 距 雅 飾 網 竜 繁 殿 濃 翼 潟 魅 嫌 斉 敷 擁 肩 圏 零 罰 怒 滅 礎 腐 脚 泊 尽 杯 僕 滑 孤 炎 賠 寿 頑 甘 鎖 彩 摩 励 掃 掘 輝 蓄 軸 巡 疲 稼 瞬 皆 砲 軟 噴 沈 誇 祥 牲 秩 帝 唆 阻 泰 賄 撲 凍 堀 菊 絞 煙 縁 唯 膨 耐 恋 塾 漏 慶 猛 芳 懲 郊 剣 腰 踊 彰 棋 恒 眠 揚 冒 倫 陳 憶 怖 潜 珍 克 岳 概 拘 黙 偏 雰 遇 諮 狭 喫 卓 糧 簿 炉 殊 殖 艦 溶 輩 奇 慢 謀 拍 丈 寛 覆 胞 涙 隔 浄 匹 没 暇 貞 鑑 陰 銘 鋭 随 烈 尋 稿 丹 啓 丘 棟 壌 漫 玄 粘 悟 舗 妊 塗 軒 騰 遂 狂 叫 岐 緯 培 衰 艇 屈 淡 抽 披 廷 准 奨 浸 剰 胆 繊 乾 虚 霊 悔 諭 祈 惨 虐 翻 墜 沼 据 徐 搭 髪 忙 盾 滝 軌 妨 擦 鯨 荘 諾 雷 漂 懐 勘 栽 拐 駄 添 汗 冠 斜 浪 亜 詐 壇 勲 魔 酬 紫 湿 紋 卸 欄 逸 涯 拓 瓶 獄 尚 彫 咲 穏 顕 巧 矛 垣 召 欺 釣 缶 粧 隻 脂 粛 愚 遭 架 鬼 庶 肌 稚 靴 滋 幻 煮 姫 誓 把 践 呈 疎 仰 鈍 恥 剛 疾 征 砕 謡 嫁 謙 嘆 菌 泥 頻 琴 棚 酷 宰 廊 寂 隅 偶 伏 辛 磨 碁 俗 漠 邪 晶 墨 鎮 洞 履 劣 殴 娠 奉 憂 朴 亭 姓 筒 怪 粒 偉 酔 惜 穫 佳 潤 悼 乏 該 赴 桑 髄 盆 穂 壮 堤 飢 傍 疫 累 痴 搬 畳 癒 郭 尿 凶 吐 宴 賓 虜 膚 陶 鐘 憾 昆 粗 訂 傘 騎 寧 濯 循 忍 猫 怠 如 寮 塔 沸 鉛 珠 凝 苗 獣 哀 跳 匠 菓 蛇 澄 縫 僧 幾 眺 唐 呉 凡 憩 溝 恭 刈 睡 錯 伯 帽 陵 霧 魂 枯 弊 妃 舶 餓 窮 掌 麗 臭 悦 刃 縛 暦 宜 盲 粋 辱 轄 猿 弦 窒 炊 洪 摂 飽 冗 涼 桃 狩 舟 朱 渦 紳 枢 碑 鍛 鼓 裸 符 猶 塊 旋 幣 膜 扇 憎 槽 慈 肯 伐 漬 燥 糾 墳 坪 畜 紺 慌 娯 羅 坊 峡 俸 厘 峰 醸 弔 乙 汁 尼 遍 衡 薫 猟 款 閲 偵 喝 敢 胎 酵 憤 豚 遮 扉 硫 赦 挟 窃 泡 又 慨 紡 恨 肪 扶 戯 忌 濁 奔 斗 迅 肖 鉢 朽 殻 享 藩 曇 媒 鶏 禅 嘱 胴 迭 挿 陪 剖 譜 悠 淑 帆 暁 傑 奴 錠 遷 拙 侍 峠 篤 渇 叔 雌 堪 叙 酢 吟 逓 甚 崇 漆 岬 癖 愉 礁 屯 姻 擬 塀 唇 閑 幽 曹 詠 卑 侮 鋳 抹 尉 隷 禍 酪 茎 帥 逝 滴 匿 襟 蛍 寡 痢 庸 坑 賊 搾 畔 孔 拷 嬢 渓 翁 廉 謹 窯 褒 醜 升 殉 煩 劾 堕 租 桟 婿 慕 罷 矯 某 囚 泌 漸 蚊 厄 藻 嫡 嚇 凸 韻 霜 硝 勅 棺 儒 愁 楼 薪 褐 賜 繕 栓 凹 伺 錬 衷 逐 斥 詔 宵 妄 酌 頒 肢 謄 嗣 畝 抄 惰 蛮 壱 侯 弧 附 但 芋 婆 倣 倹 繭 且 丙 勺 匁 吏 塑 墾 弐 斤 朕 濫 爵 璽 痘 箇 耗 脹 虞 謁 賦 遵 銑 錘 "
clear
while true; do
lin=0
[ ${#Cols[@]} -eq $(($(tput cols)-2)) ] && unset Cols
while true; do
COL=$((RANDOM%$(tput cols)))
[ "${Cols[$COL]}" ] && continue
Cols[$COL]=1
break
done
COR="\e[3$((1));1m"
maxline=$((RANDOM%$(tput lines)))
while [ $lin -lt $maxline ]; do
Char=$(echo $Chars | cut -d' ' -f$((RANDOM%`echo $Chars | wc -w`+1)))
for i in `seq 1 5`;do
Char1=$(echo $Chars | cut -d' ' -f$i);sleep 0.000001
tput cup $lin $COL; echo -en "\e[37;1m$Char1"
done
tput cup $lin $COL; echo -en "$COR$Char";sleep 0.0001
let lin++
done
done
Julio Neves
30 Set 2009, 16:16
Edson Moreno,
é provável que vc tenha razão, pq fiz este script pelo que me contaram, já que não assisti ao filme.

Existe uma lista excelente chamada shell-script no Yahoo. Lá, na época do filme, houve uma discussão sobre esse tema e começou um desenvolvimento colaborativo deste sw. Há pouco tempo, começou novamente a mesma discussão e coloquei na lista o script que tinhamos feito à época. Para minha surpresa, o Rubens Queiroz me mandou um e-mail pedindo permissão para publicar (ele sempre faz isso e eu sempre digo que ele não precisa me pedir autorização :-)).

Depois disso, publicaram na lista um script que me pareceu bem mais evoluído que esse, já que disparava threads (com named pipes) e etc. Só não sei se é mais parecido com o do filme, pq, como te disse, não o vi.

Se vc procurar no histórico da lista há uns 15-20 dias, vc o encontrará e, diga-se de passagem, está muito bem documentado.

Abraços,
Julio
Baguera
23 Set 2009, 10:12
E que graça teria pegar o Pacote pronto (6)

Continuaremos buscando melhorias ao código
Edson Moreno
21 Set 2009, 10:37
Deixando um pouco mais parecido com o original, substitua a linha :

while [ $lin -lt $(tput lines) ]; do

por :

maxline=$((RANDOM%$(tput lines)))
while [ $lin -lt $maxline ]; do
Eder Jordan
20 Set 2009, 19:35
Muito boa noite a todos os membros do Dicas-L.

Primeiramente quero parabenizar o Júlio César Neves por mais um excelente shell-script!

Para os usuários que utilizam o Debian GNU/Linux, como opção de screensaver baseado nos caracteres do filme Matrix, recomendo-lhes instalar o pacote DEB chamado cmatrix.

[root@jordan ~]# apt-cache search cmatrix
cmatrix - simulates the display from "The Matrix

No mais, desejo-lhes uma excelente semana!

FÉ, SAÚDE e PAZ!

Atenciosamente,

--
Eder Jordan
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Bombando o Shell - Caixa de Ferramentas Gráficas do Shell Linux></A>
</div>
<div align=center>
<!--
<a href='http://www.idph.net/inglesonline/inscricao.shtml' target='_blank'><img src='http://www.dicas-l.com.br/imagens/InglesOnline.jpg' border='0' alt=''></a><BR><BR>-->
<A HREF=http://iol.idph.com.br rel=

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis