Я пишу очень простой bash script, который записывает заданный каталог, шифрует его вывод и разбивает результирующий файл на несколько меньших файлов, поскольку носители резервного копирования не поддерживают огромные файлы.
У меня нет большого опыта работы с bash скриптами. Я считаю, что у меня проблемы с цитированием моих переменных, чтобы разрешить пробелы в параметрах. script следует:
#! /bin/bash
# This script tars the given directory, encrypts it, and transfers
# it to the given directory (likely a USB key).
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` DIRECTORY BACKUP_DIRECTORY"
exit 1
fi
DIRECTORY=$1
BACKUP_DIRECTORY=$2
BACKUP_FILE="$BACKUP_DIRECTORY/`date +%Y-%m-%dT%H-%M-%S.backup`"
TAR_CMD="tar cv $DIRECTORY"
SPLIT_CMD="split -b 1024m - \"$BACKUP_FILE\""
ENCRYPT_CMD='openssl des3 -salt'
echo "$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD"
$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD
say "Done backing up"
Выполнение этой команды завершается с:
split: "foo/2009-04-27T14-32-04.backup" aa: Нет такого файла или каталога
Я могу исправить это, удалив цитаты вокруг $BACKUP_FILE
, где я установил $SPLIT_CMD
. Но, если у меня есть пробел во имя моего каталога резервного копирования, он не работает. Кроме того, если я копирую и вставляю вывод из команды "echo" непосредственно в терминал, он отлично работает. Ясно, что я не понимаю, как bash ускользает от вещей.