变量作为bash脚本中的命令

我正在编写一个非常简单的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"

运行此命令失败:

split: “foo/2009-04-27T14-32-04.backup”aa: No such file or directory

我可以通过删除$BACKUP_FILE周围的引号来修复它,其中我设置$SPLIT_CMD.但是,如果我的备份目录的名称空间不起作用.另外,如果我将“echo”命令的输出直接复制并粘贴到终端,那么工作正常.显然,我不了解Bash如何逃避事情.

简单的说,不要把整个命令放在变量中.尝试恢复引用的参数时会遇到很多麻烦.

也:

>避免在脚本中使用全资本变量名.轻松的方式来拍摄自己的脚.
>不要使用反引号,使用$(…)代替,它更好地嵌套.

#! /bin/bash

if [ $# -ne 2 ]
then
    echo "Usage: $(basename $0) DIRECTORY BACKUP_DIRECTORY"
    exit 1
fi

directory=$1
backup_directory=$2
current_date=$(date +%Y-%m-%dT%H-%M-%s)
backup_file="${backup_directory}/${current_date}.backup"

tar cv "$directory" | openssl des3 -salt | split -b 1024m - "$backup_file"

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...