如何在shell脚本中获取scp命令的返回码失败,连接丢失错误

时间:2014-08-29 14:40:13

标签: shell error-handling scripting connection scp

我有一个shell脚本,我使用下面的命令拉动远程服务器的* .gz文件,在scp之后,我正在执行gunzip命令。 问题是,在执行scp时,连接会丢失,因此不完整的* .gz文件正在我的本地服务器目录中保存,当我尝试在scp命令下面的下一行进行gunzip时,它成功地将文件解压缩,当我打开时该文件包含垃圾值。

scp ${HostUser}@${HostServer}:$4/*$no*.gz 
gunzip 

当我调试时,我发现以下原因: 1.由于连接丢失导致文件传输不完整 2.在手动执行gunzip命令时,它给出了文件未找到错误的结尾。所以它在文件中随机创建垃圾值,我的脚本成功,这是不正确的。 所以我的疑问是:

  1. 我可以存储scp命令的返回代码,通过它我可以知道完成文件传输的完成情况。如果没有完成trasnfer那么脚本失败,以便gunzip命令不要尝试打开不完整的文件并在gunzip命令后存储垃圾值

  2. 我也面临着一个奇怪的问题,即第一次运行scp命令时,连接丢失但是当我从同一个会话再次触发scp命令时,它成功了。但是在生产中,每次都是新的会议,所以我们不能经常失业 还有一个特定文件,连接丢失5秒。我检查了远程服务器超时会话是5分钟

  3. 请建议

1 个答案:

答案 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