суббота, 30 октября 2010 г.

Цитатник рунета bash.org.ru в fortune

ИзображениеЯ думаю, не нужно объяснять, что из себя представляет программа Fortune в дистрибутивах Linux. Для тех кто еще никогда не сталкивался с подобной программой, если в двух словах, она пишет некую случайную цитату из своей базы данных. По умолчанию при установке программы вы получите цитаты на английском языке, если хотите, чтобы цитаты были на русском языке из соответствующей базы данных, то необходимо доустановить пакет fortune-ru из стандартного репозитория Ubuntu. Но и эти цитаты со временем надоедают, хочется иметь более «живые» цитаты в своей консоли («терминале»), например, цитаты с bash.org.ru, пусть башорг утратил уже свою былую популярность, но для fortune он еще все же сгодится.


Сначала устанавливаем пакеты «фортуны»:
sudo apt-get install fortunes fortune-mod fortunes-min fortunes-ru
Если вас не интересуют цитаты с bash.org.ru, то после установки этих пакетов вам достаточно только добавить в глобальный файл настроек /etc/bash.bashrc в самый конец одну только строчку «fortune» и на этом закончить все телодвижения в направлении цитат в «Терминале». Это можно сделать командой:
sudo sh -c 'echo "fortune" >> /etc/bash.bashrc' 
Тем же, кто решил идти до конца, пока не нужно добавлять эту строку в /etc/bash.bashrc, мы сделаем это позже и команда будет несколько иначая, а пока необходимо установить пакет ruby:
sudo aptitude install ruby-full 
В своей домашней директории создаем папку, где будут храниться цитаты с bash.org.ru полученные с помощью RSS. Я предпочла, чтобы эта папка была скрытой папкой, поэтому я в названии папки установила точку первым сисволом: 
mkdir .bash-org-ru
После успешного создания папки для цитат, создадим в ней скрипт, который и будет выполнять загрузку цитат на ваш компьютер :
gedit ~/.bash-org-ru/bash-org-ru.rb
в содержимое скрипта добавляем следующие строки:
require 'rss/2.0'
require 'cgi'
require 'net/http'
host = Net::HTTP.new('bash.im', 80)
resp, data = host.get('http://bash.im/rss/', nil)
parsed = RSS::Parser.parse(data.gsub(/\< hr\>/, '< hr />'), false)
parsed.items.each { |x| puts CGI::unescapeHTML(x.description.gsub("\n", "").gsub("< br >", "\n")); puts "%\n" }
В вышеуказанном листинге нужно убрать пробелы перед и после «br» в последней строке скрипта. Просто невозможно тут по другому опубликовать данную строчку, браузер понимает это выражение как html-тэг для этого пришлось добавить эти пробелы, которые вы у себя удалите для правильной работы скрипта.
Сохраняем файл и проверяем его работу, выполнив команду в «Терминале»:
ruby ~/.bash-org-ru/bash-org-ru.rb > ~/.bash-org-ru/bash-org-ru  
Если скрип работает правильно, то в папке .bash-org-ru должен появиться текстовый файл bash-org-ru, в котором будут находиться цитаты с bash.org.ru (Если в тексте у вас наблюдаются символы «br», то значи вы не убрали лишние пробелы из текста скрипта, как описаноу меня выше) .


Далее проверим работу команды, которая формирует из полученных цитат dat-файл для fortune:
strfile ~/.bash-org-ru/bash-org-ru ~/.bash-org-ru/bash-org-ru.dat  
В результате выполнения команды в папке ~/.bash-org-ru должен появиться файл bash-org-ru.datТаким образом проверив работу разных частей единого процесса, мы создаем последний скрипт, который при каждой загрузке системы будет получать новые цитаты с bash.org.ru и формировать dat-файл для fortune:
gedit ~/.bashorgru.sh  
в котором прописываем:
ruby ~/.bash-org-ru/bash-org-ru.rb > ~/.bash-org-ru/bash-org-ru && strfile ~/.bash-org-ru/bash-org-ru ~/.bash-org-ru/bash-org-ru.dat  
сохраняем и делаем этот файл исполняемым:
chmod +x .bashorgru.sh  
Добавляем этот скрипт в автозапуск командой gnome-session-properties или выбираем Система → Параметры → Запускаемые приложения, приписав его выполнение в командной строке:
sh /home/USER/.bashorgru.sh  
(вместо USER имя вашей учетной записи)


И последний штрих — чтобы ваш «Терминал» и консоль отображали данные цитаты достигается добавлением строки: fortune /home/USER/.bash-org-ru/ (где вместо USER имя вашей учетной записи):
sudo sh -c 'echo "fortune /home/USER/.bash-org-ru/" >> /etc/bash.bashrc'  
Если в вашем файле /etc/bash.bashrc ранее была добавлена строка «fortune», то отредактируйте этот файл, убрав данную строку и оставив только «fortune /home/USER/.bash-org-ru/»: 
sudo gedit /etc/bash.bashrc  
Для написания блога использован материал: http://linux.vsevteme.ru/2009/05/29/blog/bash-org-ru-i-fortune