Автор Тема: bash scripts за Наутилус  (Прочетена 1535 пъти)

nov_chovek

  • Напреднали
  • *****
  • Публикации: 536
  • Distribution: Ubuntu 8.10 по принуда
  • Window Manager: Gnome
    • Профил
    • WWW
bash scripts за Наутилус
« -: Oct 05, 2011, 22:02 »
Здравейте,

сглобих си няколко bash скрипта, които ми трябват за ежедневната работа, но имат нужда от тунинг. Ако може някой да помогне.

В долният скрипт целта е да се появява диалогов прозорец с input box, в която да се определя името на output файла:

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. convert $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS Output.pdf
  4.  


Другият скрипт, като цяло ползва бач функцията на ГИМП, за да оправя автоматично levels т.е. ако картинката е с блед текст, срипта го потъмнява и оправя констраста, за да се чете (в моя случай принтира) нормално. Тук проблема ми е, че срипта има проблеми с имена на файлове, в които има интервали - срипта не работи с такива файлове.

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. for F in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
  4.  
  5. gimp -i -b '(batch-levels-stretch "'$F'")' -b '(gimp-quit 0)'
  6.  


В сайта на наутилус скриптовете тук: http://g-scripts.sourceforge.net/faq.php пише как да се оправи това, но аз немога да го приложа. Ако някой може да помогне ще е супер :)

Благодаря предварително.

PS: Бач процесването в ГИПМ съм взел от тук: http://emeryclark.net/2011/03/batch-script-gimp-auto-white-balance-auto-levels/[/code]
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: bash scripts за Наутилус
« Отговор #1 -: Oct 05, 2011, 23:50 »
За първия скрипт ти трябва zenity. Пример
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. outputFile="`/usr/bin/zenity --entry --text='Въведи име на файла'`"
  4. /usr/bin/convert "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" "$outputFile"
Ако не мислиш да пишеш пълния път до файла в изскочилия прозорец, а искаш да е някъде статично забит, добави го в някой от двата реда. Не помня как беше със скриптовете на Nautilus, но ако не зададеш път, май ще запише файла там, откъдето си цъкнал изпълнението на скрипта в Nautilus. Но не е сигурно, така че пробвай. А когато става дума за файлове и папки, гледай да не си пестиш кавичките, защото ще имаш проблеми с файловете, в които има интервали.
И като стана дума за файлове с интервали и кавички, не съм сигурен какво точно прави този ред на gimp, който си показал, но сега набързо ще предположа, че проблемът е заради това, че файлът не е ограден от кавички. Вкарай променливата вътре в кавичките, но за да продължи да действа като променлива, размени местата на кавичките, тъй като променливите не действат, когато общият текст, в който се намират, е ограден от единични кавички. Вътре в текста вече можем да я оградим от единични кавички, тъй като, когато се стигне до четенето на тези кавички за изпълнение, променливата вече ще е заменена от нейната стойност
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. for F in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
  4.  
  5. gimp -i -b "(batch-levels-stretch '$F')" -b '(gimp-quit 0)'
« Последна редакция: Oct 05, 2011, 23:52 от neter »
Активен

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

nov_chovek

  • Напреднали
  • *****
  • Публикации: 536
  • Distribution: Ubuntu 8.10 по принуда
  • Window Manager: Gnome
    • Профил
    • WWW
Re: bash scripts за Наутилус
« Отговор #2 -: Oct 06, 2011, 09:57 »
neter, мерси за първия скрипт. Относно втория, принципно моя вариант работи без проблем (така написани кавичките), просто файлове с интервали в имената не се парсват. Това е проблем споменат в сайта, който съм писал по-горе и хората обясняват как се решава:

Цитат
The biggest problem is to be able to handle multiple files with spaces. Many (but not all) of the scripts here are designed to be able to do this, but they require a little thought to construct correctly. Most of the scripts in the "File System Management" (cf. uppercase, lowercase, make-nautilus-script) section are robust for this. If you are not careful, your script will be unable to tell whether a filename with a space is a single file or multiple files. One way is to simply protecting the $@ variable with "$@". Another trick to process multiple files with spaces to use something like this:

#!/bin/sh
               for arg
               do
               echo "$arg"   #"$arg" must be protected with quotes
               done
               

This can make it tricky to invoke a single command on all the files at once, and so you may need to iteratively build the commands arguments with a temporary variable. Another solution is to process the input filenames with sed, like this:

               
               files=`echo "$1" | sed 's/ /\\ /g'`
               

Some people have found that the above do not work well in all cases. Paolo Bacch suggested the following:

               #!/bin/sh
               quoted=$(echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN {
               FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
               eval "your-program $quoted"
               

Въпроса е как да го приложа това към моя скрипт?

ЕДИТ: Твоя вариант с кавичките не работи и за файл с нормално име без интервали :)
« Последна редакция: Oct 06, 2011, 10:05 от nov_chovek »
Активен


Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
boot scripts
Хардуерни и софтуерни проблеми
AntiGator 6 2190 Последна публикация Jan 26, 2004, 10:32
от AntiGator
xchat scripts
Настройка на програми
nexus 6 2158 Последна публикация Dec 14, 2004, 16:58
от sdr
Scripts za X-chat
Настройка на програми
DaSkaLa 2 1413 Последна публикация Dec 18, 2004, 15:18
от
/etc/ sysconfig/ network-scripts
Настройка на програми
int13 2 1356 Последна публикация Apr 18, 2005, 10:54
от int13
Acpi scripts, asus
Идеи и мнения
alabal 1 1696 Последна публикация Oct 23, 2007, 18:19
от alabal