Страница 1 из 1

Скрипт на bash: открытие файла с именем, содержащим пробелы

Добавлено: 22 мар 2019, 01:51
madesta
Немного длинное вступление, но нужное для понимания "хотелки".

Осуществляется переписка в виде обмена файлами 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
Проблема состоит в том, что всё работает, если имя файла содержит только 1 слово. Если имя составное, то есть содержит пробелы, то xdg-open $var не может быть выполнено вследствие того, что пытается открыть, например, не $HOME/Exchange/ForS/Файл отчёта.odt, а $HOME/Exchange/ForS/отчёта.odt.
Попытка закавычить $var, то есть сделать xdg-open "$var" к желаемому результату не приводит.

Может быть кто знает волшебный способ заставить описанное выше работать с именами файлов, содержащих пробелы?

Скрипт на bash: открытие файла с именем, содержащим пробелы

Добавлено: 22 мар 2019, 05:24
FreeStyler
Скорее всего где-то нужно поставить кавычки, одинарные или двойные...

Скрипт на bash: открытие файла с именем, содержащим пробелы

Добавлено: 22 мар 2019, 06:29
rogoznik
madesta писал(а):
22 мар 2019, 01:51
cp $sm $dm
mv $dm/Message.odt $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".odt
А не проще заменить на одну строку с копированием

Код: Выделить всё

cp $dm/Message.odt $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".odt
madesta писал(а):
22 мар 2019, 01:51
Попытка закавычить $var, то есть сделать xdg-open "$var" к желаемому результату не приводит.
Потому что твоя конструкция
madesta писал(а):
22 мар 2019, 01:51
var=`cat $temp/created.txt | awk '{print $NF}'`
Возвращает тебе не то что ты ожидаешь.
Если строка, содержащая путь к файлу, первая то сделай так

Код: Выделить всё

read var < $temp/created.txt
xdg-open "$var"
Peek 2019-03-22 08-28.gif

Скрипт на bash: открытие файла с именем, содержащим пробелы

Добавлено: 22 мар 2019, 15:22
madesta
darkfenix писал(а):
22 мар 2019, 06:29
А не проще заменить на одну строку с копированием

Код: Выделить всё

cp $dm/Message.odt $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".odt
Понимаю, что так проще, но при проверке не сработало (не иначе - шайтан какой-то :blink2: ).
Файл odt в выходной папке не появился, $temp/created.txt не содержал данных.

В дальнейшем при внимательном рассмотрении услышал сам от себя много нового и интересного, особенно по поводу своей интеллектуальной характеристики :-D . Правильная строка должна быть:

cp $sm $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".odt

В самом начале задавалось sm=$HOME/.scripts/Message.odt, поэтому $sm/Message.odt умный компьютер не понимает.

Скрипт на bash: открытие файла с именем, содержащим пробелы

Добавлено: 22 мар 2019, 19:52
rogoznik
madesta писал(а):
22 мар 2019, 15:22
В дальнейшем при внимательном рассмотрении услышал сам от себя много нового и интересного, особенно по поводу своей интеллектуальной характеристики
Самокритика это хорошо :-D