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

如何在shell脚本中获取scp命令因连接丢失而失败的返回码,shell,error-handling,scripting,connection,scp,Shell,Error Handling,Scripting,Connection,Scp,我有一个shell脚本,在这个脚本中,我使用下面的命令拉取远程服务器的*.gz文件,在scp之后,我执行gunzip命令。 问题是,在执行scp时,连接丢失,所以不完整的*.gz文件保存在本地服务器目录中,当我尝试在scp命令下面的下一行进行压缩时,它成功地压缩了文件,当我打开文件时,它包含垃圾值 scp ${HostUser}@${HostServer}:$4/*$no*.gz gunzip 调试时,我发现以下原因: 1.由于连接丢失,文件传输不完整 2.在手动执行gunzip命令时,它

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

scp ${HostUser}@${HostServer}:$4/*$no*.gz 
gunzip 
调试时,我发现以下原因: 1.由于连接丢失,文件传输不完整 2.在手动执行gunzip命令时,它给出了文件结尾未找到错误。因此它在文件中随机创建垃圾值,而我的脚本正在成功运行,这是不正确的。 因此,我的问题是:

  • 我可以存储scp命令的返回码吗?通过它我可以知道完整的文件传输是如何完成的。如果没有完成完整的传输,那么脚本将失败,这样gunzip命令就不会尝试打开不完整的文件,并在gunzip命令后存储垃圾值

  • 我还面临着一个奇怪的问题:当第一次运行scp命令时,连接丢失,但当我从同一会话再次启动scp命令时,它成功了。但在生产中,每次都是新的环节,所以我们不能承受经常性的工作失败 还有一个特定的文件,连接在5秒内丢失。我检查了远程服务器超时会话是否为5分钟


  • 请建议

    “$?”将保留最后一个命令的退出代码,以便您可以将其分配给scp命令后的变量。然后执行if语句检查退出代码是否为0,为了成功完成,请运行gunzip命令

    scp ${HostUser}@${HostServer}:$4/*$no*.gz 
    EXIT_STATUS=$?
    if [ $EXIT_STATUS -eq 0 ]; then
       gunzip
    else
       ...some error handling
    fi
    

    “$?”将保存最后一个命令的退出代码,以便您可以将其分配给scp命令后的变量。然后执行if语句检查退出代码是否为0,为了成功完成,请运行gunzip命令

    scp ${HostUser}@${HostServer}:$4/*$no*.gz 
    EXIT_STATUS=$?
    if [ $EXIT_STATUS -eq 0 ]; then
       gunzip
    else
       ...some error handling
    fi
    

    “$?”将保存最后一个命令的退出代码,以便您可以将其分配给scp命令后的变量。然后执行if语句检查退出代码是否为0,为了成功完成,请运行gunzip命令

    scp ${HostUser}@${HostServer}:$4/*$no*.gz 
    EXIT_STATUS=$?
    if [ $EXIT_STATUS -eq 0 ]; then
       gunzip
    else
       ...some error handling
    fi
    

    “$?”将保存最后一个命令的退出代码,以便您可以将其分配给scp命令后的变量。然后执行if语句检查退出代码是否为0,为了成功完成,请运行gunzip命令

    scp ${HostUser}@${HostServer}:$4/*$no*.gz 
    EXIT_STATUS=$?
    if [ $EXIT_STATUS -eq 0 ]; then
       gunzip
    else
       ...some error handling
    fi
    
    是返回码,因此可以更具体。有时您不想处理特定的错误。例如,当没有要处理的文件时(返回代码1)。连接丢失错误远远超过1。是返回码,因此可以更具体。有时您不想处理特定的错误。例如,当没有要处理的文件时(返回代码1)。连接丢失错误远远超过1。是返回码,因此可以更具体。有时您不想处理特定的错误。例如,当没有要处理的文件时(返回代码1)。连接丢失错误远远超过1。是返回码,因此可以更具体。有时您不想处理特定的错误。例如,当没有要处理的文件时(返回代码1)。连接丢失错误远远超过1。