Comando Pipe tar para SSH

0

Eu quero criar o arquivo tar em outro servidor. Quando eu executo este comando ele funciona, mas quando eu coloco este comando no meu shell script ele retorna um erro.

tar cvzf - prod_test.txt| ssh [email protected] "cat > prod_test5.tar.gz"

tar: -: Cannot stat: No such file or directory tar: prod_test.txt|: Cannot stat: No such file or directory tar: ssh: Cannot stat: No such file or directory tar: [email protected]: Cannot stat: No such file or directory tar: "cat: Cannot stat: No such file or directory tar: >: Cannot stat: No such file or directory tar: prod_test4.tar.gz": Cannot stat: No such file or directory v ÷Om7 7Þ'(tar:

#!/bin/sh
dy='date +%a'
bk='/d01/backup'

Comando de transferência

trans_oracle='tar cvzf -  prod_test.txt| ssh [email protected] "cat >  prod_test4.tar.gz"'

Excluir comando

del_oracle='rm -f '$bk'/'$dy'_apps_indus_prod.tar.gz'
echo '****** Start Time ******' >> bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_bk_net.log'

--#Transfer Backup
$trans_oracle
--#Delete Backup
#$del_oracle

echo '******  End Time  ******' >> $bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'

printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'

erro

tar: -: Cannot stat: No such file or directory tar: prod_test.txt|: Cannot stat: No such file or directory tar: ssh: Cannot stat: No such file or directory tar: [email protected]: Cannot stat: No such file or directory tar: "cat: Cannot stat: No such file or directory tar: >: Cannot stat: No such file or directory tar: prod_test4.tar.gz": Cannot stat: No such file or directory v ÷Om7 7Þ'(tar: Error exit delayed from previous errors –

O código:

#!/bin/sh
dy='date +%a'
bk='/d01/backup'

#Transfer Command 
trans_oracle='tar cvzf -  prod_test.txt| ssh [email protected] "cat >  prod_test4.tar.gz"'
#Delete Command
del_oracle='rm -f '$bk'/'$dy'_apps_indus_prod.tar.gz'


echo '****** Start Time ******' >> $bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_bk_net.log'

#Transfer Backup
$trans_oracle
#Delete Backup
#$del_oracle

echo '******  End Time  ******' >> $bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'

printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
    
por Farrukh 15.02.2017 / 07:30

1 resposta

1

Para mostrar o problema, você receberá um pequeno testcase:

Individualmente, isso funciona bem:

ls; pwd

então fazemos isso

cmd='ls ; pwd'

Agora, $cmd dará o erro aos arquivos chamados ';' e 'pwd' estão faltando.

Aqui é precisamente onde o comando "eval" entra quando você quer dar ao shell outra chance:

eval "$cmd"

é executado com sucesso como se você tivesse dado na linha de comando.

Então, em vez de $ trans_oracle, indique como: eval "$trans_oracle"

    
por 15.02.2017 / 11:33