具有批处理模式的 sftp 抑制 mput 和 mget 命令响应回显

具有批处理模式的 sftp 抑制 mput 和 mget 命令响应回显

我最近将 OpenSSH 从 6.0 升级到 7.5。

我的代码捕获put/get命令响应回显并对其进行处理以进行验证。

代码:

exec 3>&1 4>&2
  exec > $TempSessionLog 2>&1
  set -x 
  cd $LocalDir
  sftp -o PreferredAuthentications=hostbased,publickey -P $rport -b $batfile "$ruser"@"$ripaddress" > $TempLogFile  << EndFTP  
EndFTP
  retval="$?"  
    exec 1>&3 2>&4
  set +x

在 OpenSSH 6.0 中,响应被捕获TempLogFile

sftp> cd /user/data/errors/support/01
sftp> pwd
Remote working directory: /user/data/errors/support/01
sftp> mput "EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt"
**Uploading EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt to /user/data/errors/support/01/EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt**
sftp> bye

升级到OpenSSH 7.5后,回显停止了

sftp> cd /user/data/errors/support/01
sftp> pwd
Remote working directory: /user/data/errors/support/01
sftp> mput "EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt"
sftp> bye

知道如何恢复响应回声吗?

答案1

自 OpenSSH 6.3 (犯罪),其-b含义-q和 the-q确实相当:

让“sftp -q”按照标签上的说明执行操作:除了错误之外,隐藏所有内容;

case 'b':
    // ...
    showprogress = 0;
    quiet = batchmode = 1;
if (!quiet)
    printf("Uploading %s to %s\n", g.gl_pathv[i], abs_dst);

没有办法恢复该行为。


但是,如果您的脚本基本上执行单个命令,并且您使用输出检查结果,则可以不使用批处理模式。只需使用标准输入传递命令即可。

相关内容