変数を変換しない Bash スクリプト

変数を変換しない Bash スクリプト

FTPを介して私のBoxアカウントにRaspberry Piバックアップを実行するためのbashスクリプトを作成しようとしています。ほとんどの場合は機能しますが、何らかの理由で変数をその変数が表すテキストに変換しません。このスクリプトを実行すると:

#!/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

$FILENAMEを "backup-$(date +%Y-%m-%d).tar.gz"に置き換えようとしましたが、それでも返されます。

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

2つの異なる質問をしています。逆順:

  1. より良いオプションはrsyncFTPと同じくらい簡単ですが、よりスマートです。私はそれを強くお勧めします。

  2. 変数を一重引用符で囲んだため、変数は解決されません。観察する:

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

コマンドを再作成して二重引用符で囲むと、ジョブが開始されます。

関連情報