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

Автор Тема: yad - построитель GUI для шелл-скриптов  (Прочитано 24032 раз)

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

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #45 : 04 Март 2016, 09:43:39 »
подскажите как сменить шрифт в  yad --text-info а точнее нужно немного увеличить

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #46 : 04 Март 2016, 12:05:34 »
Например, yad --text-info --fontname="Sans 20"

Чтобы подобрать нужный шрифт можно запустить yad --font, выбрать там, что понравится, а он имя шрифта на вывод выдаст.

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #47 : 04 Март 2016, 12:20:55 »
Спасибо! ::)

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #48 : 08 Март 2016, 08:51:50 »
Вот еще вопрос, куда подевалась переменная $Y
#!/bin/bash
for X in 10 20 30 40 50 60 70 80 90 100
do
echo $X%
Y=$[$Y+1]
sleep 1
done | yad --progress
echo $Y
но если без " yad --progress"  то все нормально
и еще, можно ли как нибудь сделать чтоб и " yad --progress" бало видно и исполнение скрипта
"echo $X% "
Пока копаюсь в сторону "tee"
« Последнее редактирование: 08 Март 2016, 09:01:14 от ribolovp »

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #49 : 14 Март 2016, 10:16:26 »
Вот еще вопрос, куда подевалась переменная $Y
Это известный прикол, в мануале на bash  ясно сказано, что конвейеры выполняются в подоболочке, то есть все переменные в них получаются локальными - конвейер закончился, они и пропали.  Соответственно, использовать их можно только до выхода из конвейера.  Например:
#!/bin/bash
{ for X in 10 20 30 40 50 60 70 80 90 100
do
echo $X%
echo $X% >&2
Y=$[$Y+1]
sleep 1
done
echo $Y >&2; } | yad --progress
Цикл вместе с последующим выводом Y заключен в блок, стандартный вывод блока перенаправлен в yad, а вывод Y делается в stderr, туда же можно отправить и копию X.

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #50 : 14 Март 2016, 18:10:12 »
Спасибо! Теперь выполнение скрипта вижу,  а переменная все равно потерялась  :(
можно ли её экспортировать? Может не правильно выразился, скрипты пишу не так давно,
в общем, пока её записываю  во временный файл а далее вызываю Y=$(cat /tmp/Y)

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #51 : 16 Март 2016, 10:04:56 »
Экспортировать бесполезно, она все равно останется локальной.
Что вообще значит "экспорт переменной"?  У каждого запущенного процесса есть свой набор переменных окружения.  Запускаем мы из скрипта какую-нибудь программу - этой программе будет передана область памяти с копиями всех экспортированных переменных.
А что значит "выполняется в подоболочке"?  Да почти то же самое.  Запускается еще несколько экземпляров bash, и уже они выполняют каждый свою команду из конвейера.  Но поскольку тут явного вызова нет, (fork без exec) то ему достаются копии всех переменных, не только экспортированных.  Но именно копии переменных!  Как только подоболочка завершилась, эти копии в любом случае потеряются.
А почему так делается?  Да потому что для перенаправления вывода одной команды на ввод другой они должны выполняться одновременно, то есть выполняться они будут двумя разными копиями bash - подоболочками.
В вашем примере, запустил bash скрипт, а там сразу перенаправление.  Тут же запустились еще две копии bash, первая пошла выполнять цикл, а вторая yad.  Но после того, как подоболочка, выполняющая цикл, завершилась, все ее переменные, разумеется, пропали.  Существуют они только до " | ", поэтому, когда я поставил echo $Y >&2 до " | ", то Y вывелся.
То есть, нужно сделать так, чтобы все использование переменной Y происходило в одной подоболочке, до перенаправления вывода конвейером.
Или есть еще такой метод (возможно, не во всех версиях сработает, у меня работает нормально):
#!/bin/bash                                                                     
exec 3> >(yad --progress)                                                       
Y=0                                                                             
for X in 10 20 30 40 50 60 70 80 90 100.                                       
do                                                                             
echo $X% >&3                                                                   
Y=$[$Y+1]                                                                       
sleep 1                                                                         
done                                                                           
echo Y=$Y
exec 3> >(yad --progress) означает "открыть в текущем интерпретаторе дескриптор 3 на запись и перенаправить его в отдельно запущенный процесс  yad, где он будет стандартным вводом"
Довольно мудрено выглядит, но зато позволяет избавиться от конвейера, в результате все остальное будет выполняться в текущей оболочке и переменные не потеряются.  Все, что нужно отправить в yad в этом случае надо писать в 3 дескриптор: echo $X% >&3

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #52 : 17 Март 2016, 18:12:25 »
Спасибо! Это то что нужно и благодарен за объяснения, такую конструкцию встречал но не знал как работает

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #53 : 09 Ноябрь 2016, 16:45:42 »
Прошу подсказки,
Вот в этом примере:
yad --notification  --text="test" --command="gedit"
нужно при клике лкм запустить программу "gedit"  и закрыть диалог оповещения "иконку в трее",
какую команду дописать в поле "--command=?"

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 21654
  • Репутация: +157/-0
    • PuppyRus-A
Re: yad - построитель GUI для шелл-скриптов
« Ответ #54 : 09 Ноябрь 2016, 17:07:39 »
http://wiki.puppyrus.org/programming/yad#notification
Разберите /usr/local/netctl-tray из PRA

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #55 : 09 Ноябрь 2016, 18:18:02 »
/usr/local/netctl-tray
e меня по этому пути  нет  netctl-tray --> ос linuxmint 17.3
вопрос только в комманде которая закроет этот значёк.
Попробую пояснить,  Скрипт проверяет почту при наличии новых
писем запускается yad --notification, и при клике лкм открывается браузер с адресом почты,
так-как почта прочитана индикатор не нужен

http://wiki.puppyrus.org/programming/yad#notification  --> здесь нет такого примера

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 21654
  • Репутация: +157/-0
    • PuppyRus-A
Re: yad - построитель GUI для шелл-скриптов
« Ответ #56 : 10 Ноябрь 2016, 09:10:41 »
Разберите /usr/local/netctl-tray из PRA

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 21654
  • Репутация: +157/-0
    • PuppyRus-A
Re: yad - построитель GUI для шелл-скриптов
« Ответ #57 : 10 Ноябрь 2016, 10:35:50 »
Скрипт проверяет почту при наличии новых
писем запускается yad --notification, и при клике лкм открывается браузер с адресом почты,
так-как почта прочитана индикатор не нужен
http://zenway.ru/page/mailtc#cut

Оффлайн ribolovp

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: +0/-0
Re: yad - построитель GUI для шелл-скриптов
« Ответ #58 : 10 Ноябрь 2016, 16:37:03 »
http://zenway.ru/page/mailtc#cut
Готовые решения не интересны, пилю своё...
Может какой нибудь форум подскажете где задать вопросы по YAD

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 21654
  • Репутация: +157/-0
    • PuppyRus-A
Re: yad - построитель GUI для шелл-скриптов
« Ответ #59 : 10 Ноябрь 2016, 16:41:09 »
Ну так разберите мой скрипт. Там есть ЛКМ. Убить - командой в сокет или pkill
https://plus.google.com/u/0/+VictorAnanjevsky
http://murga-linux.com/puppy/viewtopic.php?t=97458