Сайт | Скачать | Видео | Wiki

Автор Тема: Разбор программ PuppyRus. Практикум.  (Прочитано 17893 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Фарватер

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 552
  • Репутация: +41/-0
Создал новый раздел в нашей Вики, где собираюсь устраивать детальный разбор кода некоторых своих bash-скриптов для повышения квалификации пользователей PuppyRus. Статьи будут не простыми статьями, а интерактивными практикумами с обсуждением текста программ, вопросами и ответами с обоих сторон.

Пока это идея. Если это надо, тогда буду потихоньку претворять ее в жизнь. Поэтому мой вопрос:

Это надо?

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #1 : 25 Июль 2008, 08:56:38 »
Идея замечательная! Такая тема очень нужна.
+1. И давайте, пока лето, начнём подготовительные курсы для "дошколят"
Предлагаю собственными силами "чайников" создать Телефонный справочник/Картотеку и т. п. на основе самых простых команд cat и grep. Давайте изобретём/модернизируем вот такой "велосипед"
Код
# cat /путь к файлу/файл.txt | grep слово или его фрагмент
В текстовом фале пишем в одну строку все сведения об каком либо объекте в произвольном порядке, с новой строки - о другом, и т. д. После создания списка открываем терминал и вводим нашу команду с ключевым словом. Будут выведены только строки, или строка, содержащие это слово ( фрагмент слова, цифру ). Давайте попробуем придать этому процессу красоту и "юзабельность", а то консоль для современных юзеров - это какое-то страшное пугало.

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #2 : 27 Июль 2008, 02:44:38 »
 Иконки. На примере Opera.
После установки pet-пакета Opera находим скрипт запуска /usr/bin/opera , подхватываем его мышью и кидаем на рабочий стол в понравившееся место. Правый клик по значку Opera, выбираем "установить значок" и в открывшееся окошко кидаем подходящую иконку. Я нашёл иконку Opera в /usr/share/icons/hicolor/48x48/apps.

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #3 : 27 Июль 2008, 09:25:22 »
 За ночь методо проб и ошибок удалось сотворить такое окошечко:
Код
#!/bin/sh
export DIALOG='<window width="500"><vbox>
    <text><label>Введите слово для поиска.</label></text>
  <entry>
    <variable>NAME</variable>
  </entry>
  <hbox>
    <button ok></button>
  </hbox>
  </vbox></window>'
 
gtkdialog3 --program DIALOG
Но переменная $NAME почему-то никуда не выводится, такое впечатление, что она остаётся пустой ???

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #4 : 27 Июль 2008, 14:02:04 »
 Решение найдено, точнее взято из puppysip :D
Код
#!/bin/sh
export DIALOG='<window width="500"><vbox>
    <text><label>Введите слово для поиска.</label></text>
  <entry>
    <variable>NAME</variable>
  </entry>
  <hbox>
    <button ok></button>
  </hbox>
  </vbox></window>'
 
for STATEMENTS in $(gtkdialog3 --program DIALOG); do
  eval $STATEMENTS
done

grep "$NAME" ./N.txt > answer.txt
geany answer.txt

Смысл предпоследнего выражения понял мало, но смутно, но переменная $NAME начала вводиться в команду поиска. Для работы необходимо создать "базу данных" - файл N.txt, обычный текстовый файл, в котором можно перечислить телефоны знакомых, или адреса магазинов, всё вплоть до литературных текстов. Команда grep будет выводить строки, содеожащие искомое слово в файл answer.txt, который при каждом новом обращении к программе переписывается заново. Скрипт и файл N.txt в данном примере находятся в одной директории, что необязательно, но надо будет прописать путь к файлу. Например /root/my_documents/N.txt
   
« Последнее редактирование: 28 Июль 2008, 09:47:21 от DdShurick »

Оффлайн mister

  • Подпись над аватаром2
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +3/-0
  • Подпись под аватаром1
Re: Разбор программ PuppyRus. Практикум.
« Ответ #5 : 31 Июль 2008, 22:36:34 »
Код
2 [b]DdShurick[/b]

если geany поддерживает чтение со стандартного ввода, то можно

[code]grep "$NAME" ./N.txt > answer.txt
geany answer.txt

Заменить на что вроде такого:
Код
grep "$NAME" ./N.txt | kate -i
[/code]

Но... вродебы geany stdin не держит. Покрайней мере беглый grep по ману результатов не дал :(

Хотя, может быть вывода xmessage будет достаточно?
Код
 grep "$NAME" ./N.txt |xmessage -file -
« Последнее редактирование: 31 Июль 2008, 22:42:05 от shurph »
Подпись3

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #6 : 01 Август 2008, 01:05:54 »
 Пробовал я такие варианты, без сохранения в файл,
Код
grep "$NAME" ./N.txt | rxvt -e
не работает - не выводит текст.
Пришлось сохранять в файл, с последующим его чтением.
Я ж не волшебник, я только учусь.

Оффлайн mister

  • Подпись над аватаром2
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +3/-0
  • Подпись под аватаром1
Re: Разбор программ PuppyRus. Практикум.
« Ответ #7 : 01 Август 2008, 11:12:23 »
Пробовал я такие варианты, без сохранения в файл,
Код
grep "$NAME" ./N.txt | rxvt -e
не работает - не выводит текст.
Пришлось сохранять в файл, с последующим его чтением.
Я ж не волшебник, я только учусь.

А такой вариант и не должен работать, все таки rxvt -e не для этого предназначен.
И еще, в вашем случае греп делает регистрозависимый запрос, что не есть хорошо для данной вещи
Подпись3

Оффлайн mister

  • Подпись над аватаром2
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +3/-0
  • Подпись под аватаром1
Re: Разбор программ PuppyRus. Практикум.
« Ответ #8 : 03 Август 2008, 12:33:48 »
Я и не спорю. Предлагайте лучше.

Эх, все-таки отсутствие манов в паппи - досадное упущение...

Пускать следует так:
grep -i "$NAME" ./N.txt |xmessage -file -
ключ -i позволяет делать регистронезависимый поиск
Подпись3

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #9 : 03 Август 2008, 22:58:58 »
 Заработало с таким вариантом строки
grep "$NAME" ./N.txt > answer.txt | xmessage -file answer.txt

Оффлайн magerlab

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 296
  • Репутация: +22/-0
Re: Разбор программ PuppyRus. Практикум.
« Ответ #10 : 07 Октябрь 2008, 22:59:52 »
Мне очень интересны возможности bash+gtk2 скриптов
Puppy Linux 4.1.2  на десктопе
NOP 4.1.3 на eee pc

Оффлайн Фарватер

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 552
  • Репутация: +41/-0
Re: Разбор программ PuppyRus. Практикум.
« Ответ #11 : 07 Октябрь 2008, 23:05:17 »
Цитата
Мне очень интересны возможности bash+gtk2 скриптов
Этого добра там будет вполне.  ;)
Собственно, овладение возможнстями bash+gtk2 я бы свел скорее к овладению bash, чем к овладению gtk2.

Оффлайн MiniQ9

  • Пользователь
  • **
  • Сообщений: 57
  • Репутация: +3/-0
Re: Разбор программ PuppyRus. Практикум.
« Ответ #12 : 15 Октябрь 2008, 12:29:09 »
В помощь ученикам - учебник по bash
http://www.ibm.com/developerworks/ru/edu/au-bash/section2.html

Оффлайн Фарватер

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 552
  • Репутация: +41/-0
Re: Разбор программ PuppyRus. Практикум.
« Ответ #13 : 15 Октябрь 2008, 12:43:50 »
Спасибо, MiniQ9!
Учебник по bash, параллельно курсу, необходим, т.к. данный курс именно практический - по решению задач. Он не может подменить собой руководство по bash, которых сейчас навалом.

DdShurick

  • Гость
Re: Разбор программ PuppyRus. Практикум.
« Ответ #14 : 29 Апрель 2009, 23:34:36 »
 Хорошее дело завяло. Предлагаю разобрать упрощённый скрипт установки pet-пакета
Код
#!/bin/sh
PACK=`echo $1 | sed -e 's/.pet//g'`
pet2tgz $PACK.pet
tar -zxvf $PACK.tar.gz | sed -e 's/^.\/wlan\///g' > $PACK.files
cat $PACK.files
# kostik wrote
echo "Установить пакет?"
echo "yes"
echo "no"
read doing
case $doing in
"yes")
cd $PACK
cat ../$PACK.files | cp -r ./ /
cat ../$PACK.files | sed -e 's/^/\//g' > /root/.packages/$PACK.files
echo "\"$PACK\" \"$PACK: \" on \" \" \\" >> /root/.packages/alienpackages.txt
cd ../
rm -rf $PACK
rm -f $PACK.files
rm -f $PACK.tar.gz
echo "Пакет установлен"
;;
"no")
echo "Выходим из процесса установки"
;;
*) echo "Введено неправильное действие"
esac
И проанализировать его на возможные ошибки.