我有一些简单的备份脚本来 tar、xz 并保存到 SMB 共享一些文件夹,并希望将变量 ($invocation) 用于命令的一部分。
不幸的是,当脚本运行时,它记得变量 $location 是空的,结果是没有备份
( xz: /mnt/backupMatrix//2020-06-05T00-27.tar.xz: No such file or directory
)。
我知道为什么它不工作,但如何正确地做到这一点?如何在启动之前“重新加载”变量 $invocation(使用新设置的 $location),而不对函数的整个调用进行硬编码?
代码如下。
#! /bin/bash
invocation="xz --threads=8 -z -9 -v -v - > /mnt/backupMatrix/$location/$(date +%Y-%m-%dT%H-%M).tar.xz"
function mcuser2
{
#backup mcuser2
location="mcuser2"
echo "setting var location to: $location"
echo "Stopping minecraft2.service"
sudo systemctl stop minecraft2.service
echo "Stopped minecraft2.service"
echo "Starting taring mcuser2"
# --exclude='/home/mcuser2/world'
tar cpf - --exclude='/home/mcuser2/plugins/dynmap/web/tiles' /home/mcuser2/ | $invocation
echo "Completed taring mcuser2"
echo "starting minecraft2.service"
sudo systemctl start minecraft2.service
echo "started successfully minecraft2.service"
}
case "$1" in
mcuser2)
mcuser2
;;
esac