Скрипт на bash: открытие файла с именем, содержащим пробелы
Добавлено: 22 мар 2019, 01:51
Немного длинное вступление, но нужное для понимания "хотелки".
Осуществляется переписка в виде обмена файлами odt. Имеющиеся отредактированные файлы, содержащие послание, отправляются раз в 30 минут.
Для открытия файла на редактирование запускается скрипт sh, который должен сделать:
- скопировать шаблон сообщения с именем Message.odt;
- запросить назначение файлу нового имени и в соответствии с этим переименовать скопированный файл Message.odt;
- сформировать список файлов, время последнего изменения которых не превышает 1 минуты. Практически это всегда 1 файл;
- так как в сформированном списке сначала присутствует указание пути к папке, а имя файла с указанием его пути задаётся второй строкой, то первую строку из файла необходимо удалить;
- прочитать полученный список и записать это значение в переменную (имеется ввиду имя файла с указанием его пути);
- выполнить xdg-open с переменной, которая была только что создана.
В результате получилось следующее:
Проблема состоит в том, что всё работает, если имя файла содержит только 1 слово. Если имя составное, то есть содержит пробелы, то xdg-open $var не может быть выполнено вследствие того, что пытается открыть, например, не $HOME/Exchange/ForS/Файл отчёта.odt, а $HOME/Exchange/ForS/отчёта.odt.
Попытка закавычить $var, то есть сделать xdg-open "$var" к желаемому результату не приводит.
Может быть кто знает волшебный способ заставить описанное выше работать с именами файлов, содержащих пробелы?
Осуществляется переписка в виде обмена файлами odt. Имеющиеся отредактированные файлы, содержащие послание, отправляются раз в 30 минут.
Для открытия файла на редактирование запускается скрипт sh, который должен сделать:
- скопировать шаблон сообщения с именем Message.odt;
- запросить назначение файлу нового имени и в соответствии с этим переименовать скопированный файл Message.odt;
- сформировать список файлов, время последнего изменения которых не превышает 1 минуты. Практически это всегда 1 файл;
- так как в сформированном списке сначала присутствует указание пути к папке, а имя файла с указанием его пути задаётся второй строкой, то первую строку из файла необходимо удалить;
- прочитать полученный список и записать это значение в переменную (имеется ввиду имя файла с указанием его пути);
- выполнить xdg-open с переменной, которая была только что создана.
В результате получилось следующее:
Код: Выделить всё
#!/bin/bash
sm=$HOME/.scripts/Message.odt
dm=$HOME/Exchange/ForS
temp=$HOME/.scripts
cp $sm $dm
mv $dm/Message.odt $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".odt
find $dm -mmin -1 > $temp/created.txt
perl -ni -e 'print unless $. == 1' $temp/created.txt
var=`cat $temp/created.txt | awk '{print $NF}'`
xdg-open $var
exit
Попытка закавычить $var, то есть сделать xdg-open "$var" к желаемому результату не приводит.
Может быть кто знает волшебный способ заставить описанное выше работать с именами файлов, содержащих пробелы?