我想在另一台服务器上创建 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"