Все эти (и другие) решения полностью провалились для меня, поэтому я нашел другое.
Вам нужен автономный установочный пакет (у меня был x64), и вам нужно вручную установить только образцы. Открытие ISO-файла, например, 7-Zip из местоположения Setup\WinSDKSamples_amd64
и запуск WinSDKSamples_amd64.msi
сделали это для меня.
Затем вы просто используете обычный установочный файл, чтобы РЕМОНТНО установить и выбрать любые компоненты, которые вы хотите.
Я думаю, что лучший сценарий будет читать ввод командной строки - что-то вроде:
#/bin/bash
echo "Shall back up $1 as $2 - press Ctrl-C to exit if this is not what you want"
sleep 3
echo "Backing Up..."
tar -cvpzf $2.tar.gz $1
echo "Backing up of $1 Complete"
notify-send -t 8000 "Backing up of $1 complete"
exit
Затем вы можете ввести команду следующим образом:
COMMAND "/path/to/input" "/path/to/output"
notify-send
также отправьте графическое уведомление, чтобы оно сообщило вам, когда это будет сделано.
Это только мое предложение - через секунду я посмотрю на ваше ...
Проблема с вашим скриптом заключается в следующем. Он скажет успешный, как $CONT1
= y
, поэтому он выполнит команду резервного копирования tar...
, а затем эхо Success
. Эхо будет только неудачным, если вы введете параметр continue не как y
. Таким образом, для этого конкретного сценария лучшим его концом будет (это только изменит то, что echo
указано в выводе терминала) :
if [ "$CONT1" == "y" ]; then
tar -cvpzf "$after.tar.gz" "$back"
echo "Backing up File finished!" ;
else
echo "Did not backup" ;
fi
exit
Это кажется work:
#!/bin/bash
echo ""
echo "Which File you want to backup?";
read input
echo "Where do you you want it to be backed up? (include .tar.gz extension)";
read output
read -p "Continue (y/n)? " CONT
if [ "$CONT" == "y" ]; then
tar -cpf "$input" "$output" || 'echo "Backing Up Failed" && exit;'
echo "Backing Up Successful!"
else
echo "Did not backup" ;
fi
exit
||
после команды означает, что она выполнит 'echo "Backing Up Failed" && exit;'
только в том случае, если команда выдаст ошибки, что заставит ее повторить неудачу и затем завершиться. Если команда не выдаст ошибок, она проигнорирует это, отобразит сообщение Successful и завершится.
Это может иметь проблемы с путями к некоторым файлам, поэтому вы можете использовать другой сценарий, который я предложил ...
Надеюсь, это поможет.
Я добавляю еще одно условие if
в ваш скрипт. Это будет работать, как вы хотите. Смотрите модифицированный скрипт ниже.
#!/bin/bash function backups_remove_file() { echo "Make Backups Of Files(s)" echo "Which File You Wanna To Make Backups?" read back echo "What's The File's Name Should Be After Backups? And Where?" read after read -p "Continue (y/n)?" CONT1 if [ "$CONT1" == "y" ]; then tar -cvpzf "$after.tar.gz" "$back" if [ $? == 0 ]; then echo "Backups File Successful !" else echo "Backups File Unsuccessful !" exit 1 fi else echo "Backups File Unsuccessful !" fi } backups_remove_file
$?
хранит состояние выхода последней команды в оболочке. в случае успеха это будет 0
Это работает:
function backups_remove_file
{
echo ""
echo "2. Make Backups Of Files(s)"
echo ""
echo "Which File You Wanna To Make Backups?"
read back
echo "What's The File's Name Should Be After Backups? And Where?"
read after
read -p "Continue (y/n)?" CONT1
if [ "$CONT1" == "y" ]; then
if tar -cvpzf "$after.tar.gz" "$back"; then
echo "Backups File Successful !"
else
echo "Backups File Unuccessful !"
fi
else
echo "User selected no"
fi
}
Причина в том, что строка после tar ...
выполняется независимо от кода выхода. Это означает, что он всегда будет отражать «успешно». Bash не вызывает автоматически исключение / ошибку, если что-то пошло не так.
Это исправлено с помощью tar ...
в операторе if
, поэтому его код выхода влияет на то, какой путь он принимает из оператора if
.