0

I am working on an application that will get files on a server via SFTP, using JSch.

There isn't much documentation, but I found this (french) blog post: Un client SSH pour Java.

I just can figure out what the TERMINATOR variable is for:

private static final String TERMINATOR = "zDonez";  

Why does this use "zDonez"?

4

2 に答える 2

2

「zDonez」は、実行するどのコマンドの出力にも表示されない任意の文字列です。その場合は、TERMINATOR に別の値を選択する必要があります。その目的は、コマンドの実行がいつ終了したかを検出することです。

于 2011-09-06T12:27:45.027 に答える
1

Klas が既に述べたように、この場合zDonezは、元のコマンドが実行された後にリモート シェルによって出力される単純な文字列です。

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

このようにして、getServerResponse()メソッドはコマンドが終了したことを認識し、正しい文字列を返すことができます。

これはチャネル タイプの最適な使用方法ではないと思います。shellチャネル タイプはインタラクティブな使用にのみ使用する必要があります。つまり、ユーザーが次のコマンドをいつ入力するかを決定するためにそこにいる場合です。(ほとんどのシェルには、この理由でプロンプトがあります。)

より良い方法は、コマンド (または一連のコマンド) ごとに個別のチャネルを使用することですが、各 exec チャネルには独自のシェルがあるため、状態を変更するコマンドや同様のコマンドをexec使用することはできません。cd


SFTP の場合、リモート コマンドを実行する必要はまったくありません。またはチャネルの代わりにChannelSftpを使用します。デフォルトの JSch ディストリビューションには、このクラスでサポートされている操作の使用方法を示す例があります。execshellSftp

より一般的なドキュメントは、wiki の JSch マニュアルにあります

(免責事項: この非公式の JSch Javadoc (公式の情報源に基づく) と、Wiki マニュアルのほとんどのテキストは私が作成しました)。

于 2011-09-06T17:14:50.983 に答える