Bash 脚本不转换变量

Bash 脚本不转换变量

我试图创建一个 bash 脚本来通过 FTP 将 Raspberry Pi 的备份运行到我的 Box 帐户。它的大部分工作,但由于某种原因它不会将变量转换为它们代表的文本。当我运行这个脚本时:

#!/bin/bash

FILENAME=backup-$(date +%Y-%m-%d).tar.gz

tar -czvf /tmp/$FILENAME /home/pi/

lftp -c 'open -e "set ftps:initial-prot ""; \
   set ftp:ssl-force true; \
   set ftp:ssl-protect-data true; \
   put /tmp/$FILENAME; " \
   -u "USERNAME", "PASSWORD" \
   ftps://ftp.box.com:990/Automation/RPI/Backups

它创建存档并正常连接到服务器,但它给了我这个错误:

put: /tmp/$FILENAME: No such file or directory

我尝试用“backup-$(date +%Y-%m-%d).tar.gz”替换 $FILENAME,但仍然返回

put: /home/pi/+%Y-%m-%d).tar.gz: No such file or directory

并使用“backup*.tar.gz”返回类似的结果。只有当我使用特定的文件名代替任何变量或通配符时,我才能让它工作,但这对我不起作用,因为我想设置一个 cron 作业来自动备份。

那么,有人知道如何解决这个问题,或者有更好的选择吗?谢谢!

答案1

如果有人有同样的问题,这是我最后得到的脚本:

#!/bin/bash

FILENAME="backup-$(date +%Y-%m-%d).tar.gz"

echo $FILENAME
tar -czvf /tmp/$FILENAME /home/pi/


lftp << EOF
        set ftps:initial-prot
        set ftp:ssl-force true
        set ftp:ssl-protect-data true
        open -u "USERNAME","PASSWORD" ftps://ftp.box.com:990/Automation/RPI/Backups
        put /tmp/$FILENAME
        bye
EOF

rm /tmp/$FILENAME

答案2

你在问两个不同的问题。按相反顺序:

  1. 更好的选择可能是rsync.它与 FTP 一样简单,但更智能。我强烈推荐它。

  2. 您的变量未解析,因为您将它们用单引号封装。观察:

    $ foo=bar $ echo $foo bar $ echo '$foo' $foo $ echo "$foo" bar

如果您重新编写命令,将其用双引号括起来,那么事情就应该开始工作了。

相关内容