Для своих нужд и потребностей своих знакомых пользователей LM класса "не въезжаю" сделал два скрипта: разрезание и склейка на части. В качестве преамбулы, наличие в комплекте поставки LM GUI утилиты gnome-split к применению не рассматривалось по причине её непонятного у меня автозавершения (самопроизвольное закрытие окна) через несколько секунд после запуска.
Скрипт склейки в результирующий файл из исходных файлов вида x00, x01, x02 и т.д. отрабатывается в терминале через кнопку запуска вида файла .desktop из меню программ. В процессе выполнения запрашивается выполнение операции Да/Нет и ввод имени результирущего файла с расширением. Собственно сам вопрос касается выполнения условия введённого имени файла (вторая форма) при сохранении условия проверки результата Да/Нет на выполнение операции (первая форма).
Первоначально предусматрривалось, что при нажатии кнопки "Нет" в первой картинке в имя склеиваемого файла будет вводится значение 0 и впоследствии это будет использовано при выполнении условия if then. К сожалению, ввиду разношёрстности содержания имени склеиваемого файла (или текстовая строка, или значение 0, или отсуствие какого-либо введённого значения) пришось ораничиться тем, что файл, содержащий вводимое имя файла, проверяется только на предмет "пустой файл" или "не пустой файл" (см. if [ -s /tmp/output.txt ]; then), а в первой форме вместо изначально задуманного записываемого значения 0 создаётся пустой файл (первоначальная идея помечена как #). Вследствие этого при пояснении причин завершения процесса без склейки файла отсутствие наличия имени файла ("Отменить" во второй форме) и отказ от выполнения операции ("Нет" в первой форме) были совмещены.
Можно ли каким-то образом это разъединить? То есть, чтобы отдельно выводилась причина отказа от операции и отдельно отсутствие введенного имени имени файла. Если возможно, то без отсылки на yad, так как пока что до его понимания мне далеко (уровень copy/paste).
Сам sh под спойлером (увы, оформить красиво как видел здесь на форуме пока не умею):
#!/bin/bash
echo " "
echo " "
echo " Выберите папку с исходными файлами,"
echo " имена которых начинаются на x..."
echo " "
echo " "
sleep 3
dir=$(zenity --file-selection --directory)
zenity --width=280 --question --title "Имя файла" --text="Укажите полное имя склеиваемого файла,\nвключая его расширение, например:\n\nХудожественный фильм.mkv или\nДокументальная телепередача.mp4\n $task" \
--ok-label="Да" \
--cancel-label="Нет"
answer=$?
if [ "$answer" -eq 0 ]; then
zenity --width=100 --title "Ввод текста" --text "Ввод имени файла с расширением:" --entry > /tmp/output.txt
elif [ "$answer" -eq 1 ]; then
# echo "0" > /tmp/output.txt
> /tmp/output.txt
elif [ "$answer" -eq 5 ]; then
# echo "0" > /tmp/output.txt
> /tmp/output.txt
fi
if [ -s /tmp/output.txt ]; then
cd "$dir"
echo " Производится склейка частей"
echo " в файл с указанным именем."
echo " "
echo " По завершении процесса Вы получите"
echo " сообщение в этом же окне."
cat x* > "$dir/$(cat /tmp/output.txt)"
find "$dir" -maxdepth 1 -name 'x*' -exec rm {} \;
echo " "
echo " "
echo " Процесс успешно завершён."
echo " Исходные файлы х... удалены."
echo " "
echo " "
sleep 3
xdg-open "$dir" &
else
echo " Процесс завершён с результатом 0."
echo " Возможные причины:"
echo " "
echo " 1) Вы отказались от операции;"
echo " 2) Вы не указали имя файла."
echo " "
sleep 8
fi
exit
echo " "
echo " "
echo " Выберите папку с исходными файлами,"
echo " имена которых начинаются на x..."
echo " "
echo " "
sleep 3
dir=$(zenity --file-selection --directory)
zenity --width=280 --question --title "Имя файла" --text="Укажите полное имя склеиваемого файла,\nвключая его расширение, например:\n\nХудожественный фильм.mkv или\nДокументальная телепередача.mp4\n $task" \
--ok-label="Да" \
--cancel-label="Нет"
answer=$?
if [ "$answer" -eq 0 ]; then
zenity --width=100 --title "Ввод текста" --text "Ввод имени файла с расширением:" --entry > /tmp/output.txt
elif [ "$answer" -eq 1 ]; then
# echo "0" > /tmp/output.txt
> /tmp/output.txt
elif [ "$answer" -eq 5 ]; then
# echo "0" > /tmp/output.txt
> /tmp/output.txt
fi
if [ -s /tmp/output.txt ]; then
cd "$dir"
echo " Производится склейка частей"
echo " в файл с указанным именем."
echo " "
echo " По завершении процесса Вы получите"
echo " сообщение в этом же окне."
cat x* > "$dir/$(cat /tmp/output.txt)"
find "$dir" -maxdepth 1 -name 'x*' -exec rm {} \;
echo " "
echo " "
echo " Процесс успешно завершён."
echo " Исходные файлы х... удалены."
echo " "
echo " "
sleep 3
xdg-open "$dir" &
else
echo " Процесс завершён с результатом 0."
echo " Возможные причины:"
echo " "
echo " 1) Вы отказались от операции;"
echo " 2) Вы не указали имя файла."
echo " "
sleep 8
fi
exit