lftp,stdout,stderr和SAP exec_protocol

问题描述

我们有Linux脚本可以通过预共享密钥进行SFTP,但是最近供应商需要密钥和密码,我想它类似于两因素身份验证。因此,供应商使用预共享密钥进行身份验证,然后提示输入密码。在输入密码之前,仅会进行部分身份验证。因此,我的标准脚本无法正常工作。为了解决这个问题,我发现lftp可以在脚本中传递密码,并解决了脚本放置和获取文件的问题。这是我的脚本:

     #!/bin/sh
     # ###########################
     # Parameters
     # $1 Source Directory
     # $2 Source File
     # $3 Target IP
     # $4 Target File
     # $5 Target Directory
     # $6 Mode (binary or ascii)
     # $7 User
     # $8 Pwd
     # ###########################
         lftp sftp://$7:$8@$3 -e "cd $5; put $1$2; bye"

此脚本是通过调用函数SXPG_COMMAND_EXECUTE从SAP abap程序中调用的。 Shell脚本的返回信息通常捕获在返回参数EXEC_PROTOCOL中。所有其他bash脚本都可以正常工作,但是与lftp一起使用时,stdout不会提供任何帮助。我们确实收到错误,所以我假设它正在捕获stderr。知道为什么会这样吗?

解决方法

它与SAP或ABAP均无关。查看here上的帖子ServerFault.com

该命令可能正在缓冲其输出,请在此处查看已接受的答案,然后尝试对其进行缓冲。