我正在编写一个非常简单的bash脚本,它对目标目录进行加密,对其输出进行加密,然后将生成的文件拆分为多个较小的文件,因为备份介质不支持大文件.
我对bash脚本没有太多经验.我相信我在正确引用我的变量以允许参数中的空格时遇到问题.该脚本如下:
#! /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"
Run Code Online (Sandbox Code Playgroud)
运行此命令失败:
拆分:"foo/2009-04-27T14-32-04.backup"aa:没有这样的文件或目录
我可以通过删除$BACKUP_FILE我设置的位置周围的引号来解决它$SPLIT_CMD.但是,如果我的备份目录名称中有空格,则它不起作用.此外,如果我将"echo"命令的输出直接复制并粘贴到终端,它可以正常工作.显然,我不明白Bash是如何逃避事情的.