> Ужé лучше, но всё равно у меня не перемещает в нужную папку (наконец-то посмотрел твой последний скрипт).
Попробую резюмировать, бо тема и моя голова уже распухли от этой локальной, хоть и интересной задачи.
-----------------------------------------------------------------------------------------------------
Программа scrot создает файл - снимок экрана в том каталоге, откуда она вызывается.
Включение в код скрипта chooser'а было бы бессмысленным, если бы созданный программой scrot файл не перемещался туда, куда указал пользователь.
Help смотри в конце поста, или еще проще: scrot --help
Но команда перемещения, указанная в help'е scrot вида:
scrot operation.png -e 'mv $f /home/kurt/Desktop/'
работает только из командной строки терминала и не работает из скрипта, если имя файла задает сам scrot.
Поясняю:
1. если задавать имя файла явно, то премещение происходит,
2. если создание имени файла доверить scrot'у, то премещение не происходит,
3. создание имени файла scrot'ом предпочтительно потому, что он включает в него дату и время до секунд - это не создает конфликта имен файлов, если делается более одного снимка за сеанс.
Поэтому процесс создания и перемещения скриншота/скриншотов решается в 2 приема:
scrot "$COMMANDSTRING"
- в этой строке параметры захвата экрана и время задержки снимка
mv echo *_scrot.png
"$FILE"
- а в этой строке получение имени файла, созданного scrot'ом и адрес, куда переместить этот файл.
Команда нахождения имени файла обязательно берется в обратные (или косые) кавычки - тогда то, что в них интерпретируется именно как КОМАНДА.
Каталог назначения $FILE берется в двойные кавычки на тот случай, если в нем окажется нечто типа <Рабочий стол>, то есть в имени есть пробелы.
Иначе до команды mv дойдет только <стол> и она не сработает.
Таким образом команда mv получает правильное имя файла и правильный каталог назначения.
Нет в компьютерном мире совершенства: если в каталоге со скриптом будут файлы, с окончанием на _scrot.png то перемещения снимка не получится и снимок осядет в этом ТЕКУЩЕМ каталоге.
Значит надо "следить за чистотой рядов".
На этом считаю (для себя) вопрос закрытым.
Если кто-то знает более изящное решение вопроса, с удовольствием поучусь.
Ссылки по теме:
http://ru.wikibooks.org/wiki/UNIX
http://en.wikipedia.org/wiki/Scrot
http://linuxandfriends.com/2008/10/25/take-screenshots-in-linux-with-scrot/
http://www.itnewb.com/tutorial/Using-Scrot-the-Screen-Shot-Command-Line-Utility-for-Linux
После "непродолжительного" обсуждения вопроса с Алексеем, мой скрипт принял вид:
#!/bin/sh
funccommand () {
if [ "$COMBOBOX1" == "All" ]; then
COMMAND1="-m"
else COMMAND1="-s"
fi
## !!! Attention: This works in scrot ver. >= 0.8 only !!!
if [ "$COMBOBOX1" == "Window" ]; then
COMMAND1="-u"
fi
COMMAND2="$COMBOBOX2"
COMMANDSTRING="$COMMAND1-b-d $COMMAND2"
##echo "COMMANDSTRING= $COMMANDSTRING"
##echo "COMBOBOX1= $COMBOBOX1"
##echo "COMBOBOX2= $COMBOBOX2"
##echo "FILE= $FILE"
scrot "$COMMANDSTRING"
mv echo *_scrot.png
"$FILE"
}
export MAIN_DIALOG="
<window>
<vbox>
<text>
<label>SCReenshOT screen-grabber</label>
</text>
<frame Command button EXIT>
<hbox>
<button cancel></button>
</hbox>
</frame>
<frame User-settings>
<hbox>
<vbox>
<text>
<label>Select grab-mode</label>
</text>
<combobox>
<variable>COMBOBOX1</variable>
<item>All</item>
<item>Window</item>
<item>Area</item>
<action>save:COMBOBOX1</action>
</combobox>
</vbox>
<vbox>
<text>
<label>Time-delay-sec</label>
</text>
<combobox>
<variable>COMBOBOX2</variable>
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>5</item>
<item>10</item>
<item>20</item>
<action>save:COMBOBOX2</action>
</combobox>
</vbox>
<button>
<label>ACCEPT</label>
<action>$0 func</action>
</button>
</hbox>
</frame>
<frame Select DIR for save screenshot>
<chooser>
<height>200</height>
<width>200</width>
<variable>FILE</variable>
<default>/home/</default>
<action>save:FILE</action>
<action>$2= $FILE</action>
</chooser>
</frame>
</vbox>
</window>
"
case $1 in
func) funccommand $2 ;;
*) gtkdialog --program=MAIN_DIALOG ;;
esac
P.S. Закомментированные строки вида: ##echo "... ..."
были нужны только для отладки, их можно смело удалить.
В строке mv echo *_scrot.png "$FILE" движок форума удаляет одинарные обратные (или косые) кавычки.
Это буква Ё - но в латинской раскладке
обратите на это внимание и исправьте если будете копировать текст скрипта,
то есть: ОБРАТНАЯ_КАВЫЧКАecho *_scrot.pngОБРАТНАЯ_КАВЫЧКА
В свете изложенного подправлю свой gcc-GTK+ бинарник и ВСЁ !!!