shell - Shell脚本中的SFTP错误处理

标签 shell error-handling scripting sftp

我正在写一个SH脚本,该脚本从SFTP服务器下载文件。
我想识别脚本的SFTP连接期间是否出现任何错误。
但是而不重定向我的输出,也不使用grep ,因为我已经将输出重定向到其他日志文件。

我尝试使命令类似于以下示例,但是我需要{---?---}部分。
例如,我使用case语法,但是我可以使用if或任何其他语法。

sftp <user>@<host>:<remote_file> <local_destination>

if [ $? != 0 ];
    then
        case {---?---} in
            {---?---})
                _error_exit "permission denied, please try again"
                ;;
            {---?---})
                _error_exit "SFTP server not responding, maybe offline"
                ;;
            {---?---})
                _error_exit "file not found"
                ;;
            *)
                _error_exit "unable to download the file from SFTP server"
        esac
    else
        _status "file downloaded"
    fi
}

最佳答案

OpenSSH sftp命令只有两个退出码,0表示成功,1表示失败。

因此,如果您需要区分不同的错误,则解析命令输出是您唯一的方法。

您可以将sftp命令输出重定向到一个临时文件,解析该临时文件以查找错误消息,然后打印该临时文件以进行输出,以便它也包含在您的日志中。

sftp ... > /tmp/sftp.log
grep ... /tmp/sftp.log
...
cat /tmp/sftp.log

关于shell - Shell脚本中的SFTP错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22565167/

相关文章:

javascript - Javascript 中的迷宫生成器未捕获类型错误

C#/Java 异常与条件语句

r - 导入GeoTiff文件时出错-R RASTER软件包

ios - urlNode.objectForKeyedSubscript ("href")作为?字符串 - Swift 2.3/Swift 3 错误

linux - Sendmail 命令将文件作为电子邮件正文和附件发送

linux - 使用 JSch 执行命令时没有得到任何输出

linux - 在 bash 中重复特定的代码行

shell - 在 awk 中按特定顺序打印文件

linux - 把猫放在后台​​卡住我的 shell

windows - 有没有办法在 Windows 中的脚本运行期间将 stderr 重定向到 stdout?