Автор Тема: shell скрипт zenity интерфейс  (Прочетена 6633 пъти)

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
shell скрипт zenity интерфейс
« -: May 02, 2015, 12:47 »
Здрасти!
Не съм много сигурен а и не мога да намеря информация, или аз не търся добре та..

Пиша една програмка на шел като искам да добавя zenity графичен интерфейс. Тъй като не видях да има вариант на прогрес бар да пита при натискане на Cancel а вместо това директно затваря, има ли някакъв елементарен начин да се направи диалог при Cancel

При проверка..

Код:
roko__@GA990-FXA-UD3_FX8320 [ 12:46:11 ] [ 05/02/15 ] [ pts/2 ] ~/Програмиране % zenity --progress ;echo $?
1

Cancel дава exit 1 но преди изпълнение на exit 1 ми трябва да има диалогов прозорец за потвърждаване.
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #1 -: May 02, 2015, 19:26 »
Мисля че намерих начин на този етап.

https://github.com/sandikata/ROKO__/blob/master/app-text/sprunge/files/sprunge
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: shell скрипт zenity интерфейс
« Отговор #2 -: May 02, 2015, 19:33 »
Така и така тръгнах да пиша този отговор, та поне да си го довърша :)

Няма функционалност в zenity за допълнително потвърждаване на action бутоните му, така че няма да минеш без затваряне на прозореца с прогреса. Решението е да си запазваш текущата стойност на прогреса, след това при затваряне на прозореца с прогреса да отваряш нов прозорец, в който да питаш за потвърждение, и ако потребителят реши да продължи (т.е., ако откаже прекъсването), да отваряш нов прозорец с прогрес, продължавайки от запазената стойност на предишния прогрес.

Ето един вариант за това:
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. tmp_file="/tmp/script_step"
  4.  
  5. func1 () {
  6.    (  
  7.    func2 () {
  8.        case "$1" in
  9.            1) sleep 1 # нужните команди в тази стъпка
  10.                ;;  
  11.            2) sleep 1 # нужните команди в тази стъпка
  12.                ;;  
  13.            3) sleep 1 # нужните команди в тази стъпка
  14.                ;;  
  15.            4) sleep 1 # нужните команди в тази стъпка
  16.                ;;  
  17.            5) sleep 1 # нужните команди в тази стъпка
  18.                ;;  
  19.            6) sleep 1 # нужните команди в тази стъпка
  20.                ;;  
  21.            7) sleep 1 # нужните команди в тази стъпка
  22.                ;;  
  23.            8) sleep 1 # нужните команди в тази стъпка
  24.                ;;  
  25.            9) sleep 1 # нужните команди в тази стъпка
  26.                ;;  
  27.            10) sleep 1 # нужните команди в тази стъпка
  28.                ;;  
  29.        esac
  30.    }  
  31.    for i in $(seq $1 10); do
  32.        echo $i > "$tmp_file"
  33.        echo $(($i*10))
  34.        func2 $i
  35.    done
  36.    ) | zenity --progress
  37. }
  38.  
  39. func1 0
  40.  
  41. while [ $? != 0 ]; do
  42.    zenity --question --text="Наистина ли?"
  43.    [ $? = 0 ] || func1 $(cat "$tmp_file")
  44. done
  45.  
  46. rm -f "$tmp_file"

Трябва да си добавиш командите в съответните стъпки и да си добавиш надписи в прогреса за различните стъпки, ако са ти нужни.
« Последна редакция: May 02, 2015, 19:42 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #3 -: May 02, 2015, 21:50 »
Аз бях пробвал със while цикъл но се отказах, много се усложнява. Сега имам друг пржблем който ме спъва да си допиша интерфейса.

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. gui="zenity"
  4. converter="mogrify"
  5.  
  6. image=`$gui --file-selection  --multiple --separator=' ' --filename=$HOME/ --file-filter='Image Files (jpg,png,bmp) | *.jpg *.png *.bmp' --file-filter='All files | *' --title="Select a image file"`
  7. case $? in
  8.        0)
  9.                echo "You selected $image.";;
  10.        1)
  11.                exit 0 ;;
  12.        255)
  13.                exit 0 ;;
  14. esac
  15.  
  16. format=`$gui --title="Format Selector" --list --radiolist --column="" --column="Format:" TRUE "jpg" FALSE "png" FALSE "pdf" --text "Select image format."`
  17. case $? in
  18.        0)
  19.                echo "You selected $format.";;
  20.        1)
  21.                exit 0 ;;
  22.        255)
  23.                exit 0 ;;
  24. esac
  25.  
  26. scale=`$gui --scale --text="compression level" --value=85`
  27. case $? in
  28. 0)
  29. echo "You selected $scale%.";;
  30. 1)
  31. exit 0 ;;
  32. 255)
  33. exit 0 ;;
  34. esac
  35.  
  36. resolution=`$gui --title="Resolution Selector" --list --radiolist --column="" --column="Resolution:" FALSE "640x480" FALSE "800x600" FALSE "1024x768" FALSE "1280x1024" TRUE "1680x1050" FALSE "1920x1080" --text "Select image resolution"`
  37. case $? in
  38.        0)
  39.                echo "You selected $resolution.";;
  40.        1)
  41.                exit 0 ;;
  42.        255)
  43.                exit 0 ;;
  44. esac
  45.  
  46. $converter -format $format -quality $scale -scale $resolution $image
  47. #2>&1 | $gui --progress --pulsate --no-cancel
  48.  

Но тук проблема е с relative path

You selected /home/roko__/Снимок экрана от 2015-02-16 17:49:27.png /home/roko__/Снимок экрана от 2015-02-17 09:45:04.png.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected jpg.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected 85%.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected 1680x1050.
mogrify: unable to open image `/home/roko__/Снимок': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: unable to open image `экрана': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: unable to open image `от': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: unable to open image `2015-02-16': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: no decode delegate for this image format `49' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `/home/roko__/Снимок': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: unable to open image `экрана': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: unable to open image `от': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: unable to open image `2015-02-17': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
mogrify: no decode delegate for this image format `45' @ error/constitute.c/ReadImage/501.

И не мога да намеря решение, или поне не ми идва на ум как да реша проблема.
« Последна редакция: May 02, 2015, 21:53 от Rosen88 »
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: shell скрипт zenity интерфейс
« Отговор #4 -: May 03, 2015, 01:01 »
От грешката не виждам проблем с относителни пътища, а проблем, дължащ се на интервалите в името на файла. На ред 46 от скрипта си огради променливата $image в двойни кавички, за да се възприема стойността ѝ като цялостен низ и да бъде подадено коректно име на файла, който да се обработи от mogrify.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #5 -: May 03, 2015, 07:26 »
От грешката не виждам проблем с относителни пътища, а проблем, дължащ се на интервалите в името на файла. На ред 46 от скрипта си огради променливата $image в двойни кавички, за да се възприема стойността ѝ като цялостен низ и да бъде подадено коректно име на файла, който да се обработи от mogrify.

Иначе останалия код може ли да се подобри или това е максимума ?

You selected /home/roko__/Снимок экрана от 2015-02-16 17:49:27.png /home/roko__/Снимок экрана от 2015-02-17 09:45:04.png.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected jpg.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected 90%.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected 1680x1050.
mogrify: no decode delegate for this image format `49' @ error/constitute.c/ReadImage/501.

Появява се някакъв друг проблем. Ако изпълня същия синтаксис в терминала няма проблем. Но тук изкарва нова изненада.

Проблема е че като ги оградя ги възприема като интервали а в терминала на тези интервали има

Снимка\ от\ дата\ месец\ година.png
« Последна редакция: May 03, 2015, 07:34 от Rosen88 »
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: shell скрипт zenity интерфейс
« Отговор #6 -: May 03, 2015, 14:04 »
Дефинирай "подобри"! Аз го считам за твърде субективен термин и не мога да го коментирам обективно.

Целта на ограждането на променливата $image в двойни кавички е точно, за да се избегнат проблеми с интервали и някои специални символи. Ефектът с наклонените черти е подобен, а за mogrify няма значение как ще се направи, стига в крайна сметка да получи точното име на файла. Вместо двойните кавички може да си поиграеш да добавяш наклонени черти в стойността на променливата $image пред всички интервали и специални символи (в примерния ти файл има двоеточия, които също биха се нуждаели от наклонени черти пред тях). Ти си прецени кое е по-добро за теб. Изпробвах ползването на кавички в скрипта за променливата $image, няма проблем, работи си, така че явно ти не си направил нещо както трябва. И тъй като забелязах, че в твоя скрипт имаш излишен интервал зад променливата $image и гледайки грешката ти, оставам с впечатлението, че си вкарал този интервал в кавичките, а това е проблем. В кавички трябва да оградиш единствено и само променливата $image
Код
GeSHi (Bash):
  1. $converter -format $format -quality $scale -scale $resolution "$image"

А наясно ли си, че ползвайки mogrify, вместо convert, ще имаш различен брой остатъчни файлове в зависимост от форматите на входния и изходния файл? При convert оригиналният файл остава наличен, докато резултатът се записва в друг файл. При mogrify резултатът ще се запише в друг файл, ако форматът на резултата е друг (например, входящ jpg файл, изходящ png файл), но ако форматите са еднакви (например, и входящият, и изходящият са jpg), то резултатът ще се запише върху оригинала. Няма по-добър или по-лош метод - зависи какво целиш.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #7 -: May 03, 2015, 15:09 »
Дефинирай "подобри"! Аз го считам за твърде субективен термин и не мога да го коментирам обективно.

Целта на ограждането на променливата $image в двойни кавички е точно, за да се избегнат проблеми с интервали и някои специални символи. Ефектът с наклонените черти е подобен, а за mogrify няма значение как ще се направи, стига в крайна сметка да получи точното име на файла. Вместо двойните кавички може да си поиграеш да добавяш наклонени черти в стойността на променливата $image пред всички интервали и специални символи (в примерния ти файл има двоеточия, които също биха се нуждаели от наклонени черти пред тях). Ти си прецени кое е по-добро за теб. Изпробвах ползването на кавички в скрипта за променливата $image, няма проблем, работи си, така че явно ти не си направил нещо както трябва. И тъй като забелязах, че в твоя скрипт имаш излишен интервал зад променливата $image и гледайки грешката ти, оставам с впечатлението, че си вкарал този интервал в кавичките, а това е проблем. В кавички трябва да оградиш единствено и само променливата $image
Код
GeSHi (Bash):
  1. $converter -format $format -quality $scale -scale $resolution "$image"

А наясно ли си, че ползвайки mogrify, вместо convert, ще имаш различен брой остатъчни файлове в зависимост от форматите на входния и изходния файл? При convert оригиналният файл остава наличен, докато резултатът се записва в друг файл. При mogrify резултатът ще се запише в друг файл, ако форматът на резултата е друг (например, входящ jpg файл, изходящ png файл), но ако форматите са еднакви (например, и входящият, и изходящият са jpg), то резултатът ще се запише върху оригинала. Няма по-добър или по-лош метод - зависи какво целиш.
Дефинирай "подобри"! Аз го считам за твърде субективен термин и не мога да го коментирам обективно.

Целта на ограждането на променливата $image в двойни кавички е точно, за да се избегнат проблеми с интервали и някои специални символи. Ефектът с наклонените черти е подобен, а за mogrify няма значение как ще се направи, стига в крайна сметка да получи точното име на файла. Вместо двойните кавички може да си поиграеш да добавяш наклонени черти в стойността на променливата $image пред всички интервали и специални символи (в примерния ти файл има двоеточия, които също биха се нуждаели от наклонени черти пред тях). Ти си прецени кое е по-добро за теб. Изпробвах ползването на кавички в скрипта за променливата $image, няма проблем, работи си, така че явно ти не си направил нещо както трябва. И тъй като забелязах, че в твоя скрипт имаш излишен интервал зад променливата $image и гледайки грешката ти, оставам с впечатлението, че си вкарал този интервал в кавичките, а това е проблем. В кавички трябва да оградиш единствено и само променливата $image
Код
GeSHi (Bash):
  1. $converter -format $format -quality $scale -scale $resolution "$image"

А наясно ли си, че ползвайки mogrify, вместо convert, ще имаш различен брой остатъчни файлове в зависимост от форматите на входния и изходния файл? При convert оригиналният файл остава наличен, докато резултатът се записва в друг файл. При mogrify резултатът ще се запише в друг файл, ако форматът на резултата е друг (например, входящ jpg файл, изходящ png файл), но ако форматите са еднакви (например, и входящият, и изходящият са jpg), то резултатът ще се запише върху оригинала. Няма по-добър или по-лош метод - зависи какво целиш.

Нещо не мога да се ориентирам къде има интервал ?
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #8 -: May 03, 2015, 15:11 »
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. gui="zenity"
  4. converter="mogrify"
  5.  
  6. image=`$gui --file-selection  --multiple --separator=' ' --filename=$HOME/ --file-filter='Image Files (jpg,png,bmp) | *.jpg *.png *.bmp' --file-filter='All files | *' --title="Select a image file"`
  7. case $? in
  8.        0)
  9.                echo "You selected $image.";;
  10.        1)
  11.                exit 0 ;;
  12.        255)
  13.                exit 0 ;;
  14. esac
  15.  
  16. outformat=`$gui --title="Format Selector" --list --radiolist --column="" --column="Format:" TRUE "jpg" FALSE "png" FALSE "pdf" --text "Select output image format."`
  17. case $? in
  18.        0)
  19.                echo "You selected $outformat.";;
  20.        1)
  21.                exit 0 ;;
  22.        255)
  23.                exit 0 ;;
  24. esac
  25.  
  26. scale=`$gui --scale --text="compression level" --value=85`
  27. case $? in
  28. 0)
  29. echo "You selected $scale%.";;
  30. 1)
  31. exit 0 ;;
  32. 255)
  33. exit 0 ;;
  34. esac
  35.  
  36. resolution=`$gui --title="Resolution Selector" --list --radiolist --column="" --column="Resolution:" FALSE "640x480" FALSE "800x600" FALSE "1024x768" FALSE "1280x1024" TRUE "1680x1050" FALSE "1920x1080" --text "Select image resolution"`
  37. case $? in
  38.        0)
  39.                echo "You selected $resolution.";;
  40.        1)
  41.                exit 0 ;;
  42.        255)
  43.                exit 0 ;;
  44. esac
  45.  
  46. $converter -format $outformat -quality $scale -scale $resolution "$image"
  47. #2>&1 | $gui --progress --pulsate --no-cancel
  48.  

Сложих кавичките само на $image

You selected /home/roko__/Снимок экрана от 2015-02-16 17:49:27.png /home/roko__/Снимок экрана от 2015-02-17 09:45:04.png.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected jpg.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected 85%.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
You selected 1680x1050.
mogrify: no decode delegate for this image format `49' @ error/constitute.c/ReadImage/501.
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #9 -: May 03, 2015, 16:32 »
Всъщност... Проблема идва при повече от 1 файл. Imagemagic не иска да ги разпознава ако изглеждат така.

/home/roko__/Снимок экрана от 2015-02-16 17:49:27.png /home/roko__/Снимок экрана от 2015-02-17 09:45:04.png /home/roko__/Снимок экрана от 2015-02-18 00:28:00.png /home/roko__/Снимок экрана от 2015-02-18 08:54:39.png

Но ако избраните от file-select файлове могат да се представят в шел скрипта като

/home/user/*.png тогава няма проблем.
Знам че питам за нещо което би било трудно приложимо.
Нали да работи по този начин само за избраните файлове от file-select а не да накърти всички файлове със зададено разширение в директорията.
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: shell скрипт zenity интерфейс
« Отговор #10 -: May 04, 2015, 14:18 »
Ааа, не съм видял, че ползваш multiple в избора на файлове. В такъв случай трябва да вкараш имената на файловете в масив, с което хем ще получиш добро разделение на имената, хем удобно ще ги засилваш един по един към mogrify, тъй като той поддържа подаване на само 1 файл наведнъж. За целта в твоя скрипт замени ред 6 с това:
Код
GeSHi (Bash):
  1. IFS=$'\n' image=`$gui --file-selection  --multiple --separator=$'\n' --filename=$HOME/ --file-filter='Image Files (jpg,png,bmp) | *.jpg *.png *.bmp' --file-filter='All files | *' --title="Select a image file"`
и замени ред 46 с това:
Код
GeSHi (Bash):
  1. for i in ${image[@]}; do
  2.    $converter -format $format -quality $scale -scale $resolution "$i"
  3. done
В първата заменка указваме разделителят на файловете да е нов ред, а във втората заменка обхождаме масива и изпълняваме mogrify за всеки от елементите му.

Намирам за много подходящо, ако добавиш zenity прозорец с прогрес при обхождането на масива, за да не се чуди потребителят до кой файл се е стигнало в обработката при множество файлове. Е, пак се опира до въпроса от началото на темата, но той вече е изяснен :)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #11 -: May 04, 2015, 15:20 »
Ааа, не съм видял, че ползваш multiple в избора на файлове. В такъв случай трябва да вкараш имената на файловете в масив, с което хем ще получиш добро разделение на имената, хем удобно ще ги засилваш един по един към mogrify, тъй като той поддържа подаване на само 1 файл наведнъж. За целта в твоя скрипт замени ред 6 с това:
Код
GeSHi (Bash):
  1. IFS=$'\n' image=`$gui --file-selection  --multiple --separator=$'\n' --filename=$HOME/ --file-filter='Image Files (jpg,png,bmp) | *.jpg *.png *.bmp' --file-filter='All files | *' --title="Select a image file"`
и замени ред 46 с това:
Код
GeSHi (Bash):
  1. for i in ${image[@]}; do
  2.    $converter -format $format -quality $scale -scale $resolution "$i"
  3. done
В първата заменка указваме разделителят на файловете да е нов ред, а във втората заменка обхождаме масива и изпълняваме mogrify за всеки от елементите му.

Намирам за много подходящо, ако добавиш zenity прозорец с прогрес при обхождането на масива, за да не се чуди потребителят до кой файл се е стигнало в обработката при множество файлове. Е, пак се опира до въпроса от началото на темата, но той вече е изяснен :)

А тази променлива IFS ?

Иначе направих въпросните промени иии.

roko__@GA990-FXA-UD3_FX8320 [ 15:18:31 ] [ 05/04/15 ] [ pts/2 ] ~/Програмиране % ./imagemagick-backend
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
/home/roko__/png/Fractal_Nineteenteen_by_Drumbtr.png\n/home/roko__/png/ILTQq.png\n/home/roko__/png/Qsbbfie.png\n/home/roko__/png/sparks-wallpaper.png\n/home/roko__/png/square-pattern-1080p.png
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
jpg
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
85
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
1680x1050
convert: unable to open image `85': Нет такого файла или каталога @ error/blob.c/OpenBlob/2701.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
convert: no images defined `/home/roko__/png/Fractal_Nineteenteen_by_Drumbtr.png\n/home/roko__/png/ILTQq.png\n/home/roko__/png/Qsbbfie.png\n/home/roko__/png/sparks-wallpaper.png\n/home/roko__/png/square-pattern-1080p.png' @ error/convert.c/ConvertImageCommand/3210.
1 roko__@GA990-FXA-UD3_FX8320 [ 15:18:42 ] [ 05/04/15 ] [ pts/2 ] ~/Програмиране %                                                                                                                         :(
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: shell скрипт zenity интерфейс
« Отговор #12 -: May 04, 2015, 15:44 »
Иначе направих въпросните промени иии.
Грешката говори, че не си ги направил така, както ти показах. Предполагам, че си пропуснал един знак за долар при separator-а и/или задаването на IFS.

IFS е променлива, указваща на bash какво да използва за разделител на низовете. По подразбиране е бели полета (интервал, табулация и нов ред). В случая указваме за разделител да се счита само нов ред. Така, попълвайки файловете в масива в отделни редове, благодарение на separator-а в zenity, в масива $image интервалите в имената на файловете не се считат за край на името на файла и имаме коректен списък от имена на файлове. Ама за тези неща има документация :)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #13 -: May 04, 2015, 16:05 »
Иначе направих въпросните промени иии.
Грешката говори, че не си ги направил така, както ти показах. Предполагам, че си пропуснал един знак за долар при separator-а и/или задаването на IFS.

IFS е променлива, указваща на bash какво да използва за разделител на низовете. По подразбиране е бели полета (интервал, табулация и нов ред). В случая указваме за разделител да се счита само нов ред. Така, попълвайки файловете в масива в отделни редове, благодарение на separator-а в zenity, в масива $image интервалите в имената на файловете не се считат за край на името на файла и имаме коректен списък от имена на файлове. Ама за тези неща има документация :)

Да изтървал съм долара

http://sprunge.us/ZjeG

Сложих и прогрес бар но нещо тук наистина не ми идва на ум как да му сложа на него в --title или --text да показва текущо конвертираната снимка.

Със --text="$i" ?
« Последна редакция: May 04, 2015, 16:19 от Rosen88 »
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

Rosen88

  • Напреднали
  • *****
  • Публикации: 178
  • Distribution: Gentoo Base System release 2.7
  • Window Manager: Gnome 41
    • Профил
Re: shell скрипт zenity интерфейс
« Отговор #14 -: May 04, 2015, 17:05 »
https://www.youtube.com/watch?v=sq9yd4mphYE

https://github.com/sandikata/ROKO__/blob/master/imagemagick-zenity

Не е перфектна, доста примитивна е даже, но все пак още го изучавам...

И благодарско за помощта.
Активен

AMD Ryzen 5 3600x (4.3GHz/1.3V) Noctua NH-D14
GB B450 Aorus Elite
32GB DDR4 3200MHz Corsair Vengeance LPX
Samsung 970 Evo Plus M.2 1TB / Samsung QVO 860 1TB
Western Digital Red 1TB
GB RX580 8GB Gaming
Fractal Design Integra M650
DeepCool Macube 310

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Shell?
Настройка на програми
Cnupo 6 3580 Последна публикация Feb 06, 2004, 00:57
от SGM
shell
Настройка на програми
svetoslav 3 3050 Последна публикация Mar 21, 2004, 18:03
от
Shell-ove
Коментар
investor 5 3355 Последна публикация Feb 10, 2006, 21:22
от investor
Dc++ клиент за shell
Настройка на програми
FuckBTK 0 1579 Последна публикация Apr 19, 2006, 09:50
от FuckBTK
Shell картинка
Настройка на програми
Hanibal 0 1746 Последна публикация Jan 08, 2007, 00:35
от Hanibal