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