0

我正在开发一个应用程序,该应用程序将使用JSch通过 SFTP 在服务器上获取文件。

文档不多,但我发现了这篇(法语)博客文章:Un client SSH pour Java

我只是可以弄清楚TERMINATOR变量的用途:

private static final String TERMINATOR = "zDonez";  

为什么这样用"zDonez"

4

2 回答 2

2

“zDonez”是一个任意字符串,不会出现在您运行的任何命令的输出中。如果是这样,您需要为 TERMINATOR 选择另一个值。它的目的是检测命令何时完成运行。

于 2011-09-06T12:27:45.027 回答
1

正如 Klas 已经说过的,在这种情况下,zDonez它只是一个字符串,它将在执行原始命令后由远程 shell 打印。

command += "; echo \"" + TERMINATOR + "\" \n";

通过这种方式,该getServerResponse()方法可以知道命令何时完成,并返回正确的字符串。

我会说这不是shell通道类型的最佳用途,它应该只用于交互使用,即当用户在那里决定何时输入下一个命令时。(出于这个原因,大多数 shell 都有提示。)

更好的方法是exec为每个命令(或一系列命令)使用单独的通道,但是您不能使用cd或类似的状态更改命令,因为每个 exec 通道都有自己的外壳。


对于 SFTP,您根本不需要执行远程命令 - 使用ChannelSftp而不是execorshell通道。默认的 JSch 发行版中有一个Sftp示例,它显示了如何使用此类支持的任何操作。

更多通用文档在wiki 中的 JSch 手册中

(免责声明:我编写了这个非官方的JSch Javadoc(基于官方来源),以及 Wiki 手册中的大部分文本)。

于 2011-09-06T17:14:50.983 回答