传输命令

传输命令

我想在另一台服务器上创建 tar 文件。当我执行此命令时,它可以工作,但是当我将此命令放入 shell 脚本中时,它会返回错误。

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

tar: -: 无法统计:没有这样的文件或目录 tar: prod_test.txt|: 无法统计:没有这样的文件或目录 tar: ssh: 无法统计:没有这样的文件或目录 tar:[电子邮件受保护]:无法统计:没有这样的文件或目录 tar:“cat:无法统计:没有这样的文件或目录 tar:>:无法统计:没有这样的文件或目录 tar:prod_test4.tar.gz”:无法统计:没有这样的文件或目录 v ÷Om7 7Þ'(tar:

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

传输命令

trans_oracle='tar cvzf -  prod_test.txt| ssh [email protected] "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'

错误

tar: -: 无法统计:没有这样的文件或目录 tar: prod_test.txt|: 无法统计:没有这样的文件或目录 tar: ssh: 无法统计:没有这样的文件或目录 tar:[电子邮件受保护]:无法统计:没有这样的文件或目录 tar:“cat:无法统计:没有这样的文件或目录 tar:>:无法统计:没有这样的文件或目录 tar:prod_test4.tar.gz”:无法统计:没有这样的文件或目录 v ÷Om7 7Þ'(tar: 错误退出因先前的错误而延迟 –

代码:

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

答案1

为了显示这个问题,你得到一个小测试用例就足够了:

单独来看,这运行良好:

ls; pwd

然后我们这样做

cmd='ls ; pwd'

现在$cmd将给出名为“;”的文件的错误和“pwd”丢失。

当您想要再次启动 shell 时,这正是“eval”命令的用武之地:

eval "$cmd"

成功运行,就像您在命令行中给出的一样。

因此,不要将 $trans_oracle 指定为:eval "$trans_oracle"

相关内容