FTP “colocar” não copiando o arquivo para o host remoto quando executado a partir do script de shell, mas copia o arquivo para o host remoto quando executado manualmente

1
ftp -n ${FTP_HOST} << STOP
    user ${FTP_USERNAME} ${FTP_PASSWORD}

    binary
    lcd ${FTP_FROM_DIR}
    cd ${FTP_TO_DIR}
    put ${reportFileName}   
STOP

Esse é o meu código que não está copiando com sucesso o arquivo para o host remoto, mas usando-o manualmente ele copia com sucesso o arquivo para o host remoto.

Quando executado a partir de um script, "uso (arquivo local): colocar arquivo remoto de arquivo local" aparece no console.

qual poderia ser o problema?

    
por Kevin Macaraeg 26.09.2014 / 07:40

1 resposta

0

Eu suspeito que parte do seu problema está no modo como você construiu seu heredoc. Experimente assim:

$ ftp -n ${FTP_HOST} << STOP
user ${FTP_USERNAME} ${FTP_PASSWORD}

binary
lcd ${FTP_FROM_DIR}
cd ${FTP_TO_DIR}
put ${reportFileName}   
STOP

Se você realmente quer esses espaços / guias no comando, então você precisa mudar para esta forma de heredoc:

$ ftp -n ${FTP_HOST} <<-STOP
    user ${FTP_USERNAME} ${FTP_PASSWORD}

    binary
    lcd ${FTP_FROM_DIR}
    cd ${FTP_TO_DIR}
    put ${reportFileName}   
STOP

Sempre que você tiver espaços / tabulações em seu heredoc, precisará usar o <<- para dizer ao shell para remover os espaços / tabulações iniciais antes de executar os comandos contidos nele.

Uma barra lateral no uso de eco

Quando você está analisando variáveis dentro de scripts e você usa inocentemente echo para imprimir mensagens, você normalmente obtém mais do que apenas a sequência na qual está interessado. echo também incluirá um caractere de nova linha à direita. Você pode vê-lo aqui neste exemplo:

$ echo $(echo hi) | hexdump -C
00000000  68 69 0a                                          |hi.|
00000003

O 0a é o código ASCII de uma nova linha. Então, você normalmente deseja desabilitar esse comportamento usando a opção -n para echo :

$ echo -n $(echo hi) | hexdump -C
00000000  68 69                                             |hi|
00000002

Ou melhor ainda, atualizar para usar printf .

Referências

por 26.09.2014 / 08:49

Tags