我有一个shell脚本,我使用下面的命令拉动远程服务器的* .gz文件,在scp之后,我正在执行gunzip命令。 问题是,在执行scp时,连接会丢失,因此不完整的* .gz文件正在我的本地服务器目录中保存,当我尝试在scp命令下面的下一行进行gunzip时,它成功地将文件解压缩,当我打开时该文件包含垃圾值。
scp ${HostUser}@${HostServer}:$4/*$no*.gz
gunzip
当我调试时,我发现以下原因: 1.由于连接丢失导致文件传输不完整 2.在手动执行gunzip命令时,它给出了文件未找到错误的结尾。所以它在文件中随机创建垃圾值,我的脚本成功,这是不正确的。 所以我的疑问是:
我可以存储scp命令的返回代码,通过它我可以知道完成文件传输的完成情况。如果没有完成trasnfer那么脚本失败,以便gunzip命令不要尝试打开不完整的文件并在gunzip命令后存储垃圾值
我也面临着一个奇怪的问题,即第一次运行scp命令时,连接丢失但是当我从同一个会话再次触发scp命令时,它成功了。但是在生产中,每次都是新的会议,所以我们不能经常失业 还有一个特定文件,连接丢失5秒。我检查了远程服务器超时会话是5分钟
请建议
答案 0 :(得分:3)
“$?将保存最后一个命令的退出代码,以便您可以在scp命令之后将其分配给变量。然后执行if语句来检查退出代码是否为0,以便成功完成,然后运行gunzip命令。
scp ${HostUser}@${HostServer}:$4/*$no*.gz
EXIT_STATUS=$?
if [ $EXIT_STATUS -eq 0 ]; then
gunzip
else
...some error handling
fi