O script Bash não converte variáveis [duplicado]

0

Eu estava tentando criar um script bash para executar um backup do meu Raspberry Pi na minha conta do Box via FTP. A maioria funciona, mas por algum motivo não converte variáveis no texto que elas representam. Quando eu executo este script:

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

Ele cria o arquivo e se conecta ao servidor bem, mas isso me dá este erro:

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

Eu tentei substituir $ FILENAME por "backup - $ (date +% Y-% m-% d) .tar.gz", mas isso ainda retorna

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

e usando "backup * .tar.gz" retorna similar. Eu só posso fazê-lo funcionar se eu usar o nome de arquivo específico no lugar de quaisquer variáveis ou curingas, mas isso não funciona para mim, pois eu quero configurar uma tarefa cron para fazer o backup automaticamente.

Então, alguém sabe como contornar isso, ou uma alternativa melhor? Obrigado!

    
por Trevor Gross 10.01.2016 / 21:08

2 respostas

1

Você está fazendo duas perguntas diferentes. Na ordem inversa:

  1. Uma alternativa melhor pode ser rsync . É tão fácil quanto o FTP, mas muito mais inteligente. Eu recomendo.

  2. Suas variáveis não estão sendo resolvidas porque você as tem encapsuladas com aspas simples. Observe:

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

Se você retrabalhar seu comando de forma que ele seja encapsulado por aspas duplas, as coisas começarão a funcionar.

    
por 10.01.2016 / 21:18
2

Caso alguém tenha a mesma pergunta, aqui está o script que acabei:

#!/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
    
por 10.01.2016 / 22:21