变量作为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"

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...