Передать команду tar в SSH

Я хочу создать tar-файл на другом сервере. Когда я выполняю эту команду, она работает, но когда я помещаю эту команду в свой сценарий оболочки, она возвращает ошибку.

tar cvzf - prod_test.txt| ssh oracle@192.168.1.248 "cat > prod_test5.tar.gz"

tar: -: Невозможно статистика: Нет такого файла или каталога tar: prod_test.txt |: Cannot stat: Нет такого файла или каталога tar: ssh: Cannot stat: Нет такого файл или каталог tar: (скрытый) Cannot stat: Нет такого файла или каталог tar: "cat: Cannot stat: Нет такого файла или каталога tar:>: Невозможно статистика: нет такого файла или каталога tar: prod_test4.tar.gz ": Невозможно stat: нет такого файла или каталога v ÷ Om7 7Þ '(tar:

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

Команда передачи

trans_oracle='tar cvzf -  prod_test.txt| ssh oracle@192.168.1.248 "cat >  prod_test4.tar.gz"'

Команда удаления

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'

error

tar: -: Невозможно stat: Нет такого файла или каталога tar: prod_test.txt | : Cannot stat: Нет такого файла или каталога tar: ssh: Cannot stat: Нет такого файл или каталог tar: (скрытый) Cannot stat: Нет такого файла или каталог tar: "cat: Cannot stat: Нет такого файла или каталога tar:>: Невозможно статистика: нет такого файла или каталога tar: prod_test4.tar.gz ": Невозможно stat: нет такого файла или каталога v ÷ Om7 7Þ '(tar: задержка выхода из-за ошибки из предыдущих ошибок -

Код:

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

#Transfer Command 
trans_oracle='tar cvzf -  prod_test.txt| ssh oracle@192.168.1.248 "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'
0
15.02.2017, 10:09
1 ответ

Чтобы показать проблему, которую вы получаете, будет достаточно небольшого теста:

По отдельности это работает нормально:

ls; pwd

затем мы делаем это

cmd='ls ; pwd'

Теперь $ cmd выдаст ошибку, файлы с именами ';' и 'pwd' отсутствуют.

Именно здесь появляется команда "eval", когда вы хотите дать оболочке еще одну попытку:

eval "$cmd"

выполняется успешно, как если бы вы указали ее в командной строке.

Поэтому вместо $ trans_oracle дайте ему следующий вид: eval "$ trans_oracle"

1
28.01.2020, 02:46

Теги

Похожие вопросы