2011-09-06 39 views
0

我工作的一個應用程序,將通過SFTP獲得一個服務器上的文件,使用JSch爲什麼這個SSH客戶端使用「zDonez」?

沒有太多的文檔,但我發現這個(法語)的博客文章:Un client SSH pour Java

我可以計算出TERMINATOR變量是什麼:

private static final String TERMINATOR = "zDonez"; 

爲什麼會這樣使用"zDonez"

+1

實際上,一個簡短的Google搜索'zDonez'顯示了[SSH over Java](http://blog.james-carr.org/2006/07/11/ssh-over-java/),它解釋了什麼是去這裏。 (這也似乎是這個代碼的起源,而且是英文的。) –

回答

2

「zDonez」是不會出現在任何運行命令的輸出的任意字符串。如果是這樣,您需要爲TERMINATOR選擇另一個值。 它的目的是檢測命令何時完成運行。

1

正如克拉斯已經說過,在這種情況下zDonez是簡單地將由遠程外殼被執行的原始命令之後被打印的字符串。

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

通過這種方式getServerResponse()方法可以知道什麼時候該命令完成,並返回正確的字符串。

我會說這不是shell通道類型的最佳使用,它只能用於交互式使用,即當用戶在那裏決定何時輸入下一個命令。 (大多數shell有這個原因提示。)

一個更好的方法是使用單個exec頻道爲每個命令(或一系列命令),雖然然後你不能使用cd或類似的狀態改變命令,因爲每個可執行通道都有自己的外殼。


對於SFTP,你並不需要在所有執行遠程命令 - 使用ChannelSftp代替execshell通道。默認的JSch發行版中有Sftp示例,該示例演示如何使用有關此類支持的任何操作。

更一般的文檔是在JSch Manual in the wiki。 (免責聲明:我寫了inofficial JSch Javadoc(基於官方消息),也是Wiki手冊中的大部分文本)。

相關問題