Я пишу bash-скрипт на основе zenity, который позволяет пользователю выбирать файлы для сжатия и сжимает их с помощью zip.
Проблема в том, что всякий раз, когда я добираюсь до "молнии", это не работает. С другой стороны, когда я пишу точно такую же команду прямо в терминал, все идет хорошо, и появляется новый zip-файл.
Конечно, у меня есть #!/bin/bash
в верхней части кода моего скрипта.
Я пробовал два вида команд, с кавычками и апострофами (в терминале апострофы допускают имена файлов из нескольких слов, в то время как кавычки работают только с именами файлов из одного слова), но ни одна из них не работает. Вот как я использую команды:
Команды:
zip 'file name.zip' '/home/user/filetozip.txt'
zip "file name.zip" "/home/user/filetozip.txt"
Оба варианта оставляют меня с этим (конечно, один печатает апострофы, а другой - кавычки):
zip warning: name not matched: name.zip'
zip warning: name not matched: '/home/user/filetozip.txt'
zip error: Nothing to do! ('file.zip)
Как я уже говорил, опция апостроф отлично работает при вводе в терминал, независимо от того, использую я имена файлов из одного слова или нет; тот, который заключен в кавычки, работает только с именами файлов из одного слова. Я понятия не имею, почему скрипт всегда выводит эти ошибки.
В идеале, я бы хотел, чтобы скрипт разрешал имена файлов из нескольких слов, но если кто-нибудь может дать мне ответ хотя бы для имен файлов из одного слова, я тоже буду благодарен.
Вот часть скрипта, отвечающая за сжатие:
FILE=`zenity --file-selection --title "Choose the file for compression"`
NAME=`zenity --entry --title "File name" --text "Enter the name for the zip file:"`
zenity --question --title "Encryption" --text="Do you want your zip file to be password protected?" --ok-label="Yes" --cancel-label="No" --width 230
if [[ $? -eq 0 ]]; then
PASS=`zenity --password --title "Password" --text "Enter password:" --width 250`
while [[ -z $PASS ]]; do
zenity --error --title "Error" --text "Empty password" --width 200
PASS=`zenity --password --title "Password" --text "Enter password:" --width 250`
done
#zip with password
ODP="-P ${PASS} '${NAME}.zip' '${FILE}'"
else #zip without password
ODP="'${NAME}.zip' '${FILE}'"
fi
zip $ODP