변수를 변환하지 않는 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

두 가지 다른 질문을하고 있습니다. 역순으로:

  1. 더 나은 옵션은 rsyncFTP만큼 간단하지만 더 똑똑합니다. 나는 그것을 강력히 추천합니다.

  2. 변수를 작은따옴표로 묶었기 때문에 변수가 확인되지 않습니다. 관찰하다:

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

명령을 다시 작성하여 큰따옴표로 묶으면 작업이 시작됩니다.

관련 정보