我正在开发一个应用程序,它将使用JSch通过SFTP在服务器上获取文件。
没有太多文档,但我发现这篇(法语)博客文章:Un client SSH pour Java。
我可以弄清楚TERMINATOR
变量的用途:
private static final String TERMINATOR = "zDonez";
为什么这会使用"zDonez"
?
答案 0 :(得分:2)
“zDonez”是一个任意字符串,不会出现在您运行的任何命令的输出中。如果是,则需要为TERMINATOR选择另一个值。 它的目的是检测命令何时完成运行。
答案 1 :(得分:1)
正如Klas所说,在这种情况下,zDonez
只是一个字符串,在执行原始命令后将由远程shell打印。
command += "; echo \"" + TERMINATOR + "\" \n";
通过这种方式,getServerResponse()
方法可以知道命令何时完成,并返回正确的字符串。
我想说这不是shell
频道类型的最佳用法,它只应用于交互式使用,即当用户在那里决定何时输入下一个命令时。 (大多数炮弹因此而提示。)
更好的方法是为每个命令(或一系列命令)使用单独的exec
通道,但是您不能使用cd
或类似的状态更改命令,因为每个exec渠道将拥有自己的外壳。
对于SFTP,您根本不需要执行远程命令 - 使用ChannelSftp而不是exec
或shell
频道。默认的JSch发行版中有Sftp
示例,其中显示了如何使用此类支持的任何操作。
更多常规文档位于JSch Manual in the wiki。
(免责声明:我写了inofficial JSch Javadoc(根据官方消息来源),以及维基手册中的大部分内容。