2

ここに何かが欠けているに違いありませんが、Ganymed SSH API で "cd /root/some/dir/" のようなものを呼び出すにはどうすればよいですか?

  1. Connectionオブジェクトを作成しました

  2. 作成された最初のセッションで、「cd /root/some/dir」を呼び出しました

  3. 作成した 2 番目のセッションでは、「ls」を呼び出しました。または「./myApp」

ganymed はおそらく各セッションを独自のディレクトリで開始するため、これは機能しませんでした

同じセッションで両方のコマンドを実行する必要がありますか? 何かのようなもの:

session.getStdin().write("cd /root/somedir \n".getBytes());
session.getStdin().write("ls . ".getBytes());

それは正しい方法ですか?? もしそうなら、なぜ必要なのSession.execCommandですか?

4

3 に答える 3

1

いくつかの調査を行った後、私が見つけた唯一の良い解決策は、このように「ls」コマンドと同じコード内で「cd」コマンドを呼び出すことです。

session.execCommand("cd /root/somedir ; ls .");

セミコロンは、他のbashコードと同様に2つのコマンドを区切ります。

このようにして、とコマンドsession.getExitStatus()の両方のセッションの結果[]を照会できます。これは、2つのコマンドを書き込むより もはるかに優れています(stdinに書き込んだ後、終了ステータスをチェックするすべての機能が失われます...)cdlssession.getStdIn()

これが残りの部分に役立つことを願っています

Eyal

于 2011-10-04T16:51:37.727 に答える
0

OK、Ganymed javadoc をざっと見てみました。自分で試したわけではありませんがexecCommand()、STDIN に書き込むのではなく、セッションのメソッドを使用する必要があると思います。セッションがリモートシェルに接続されているため、現在のディレクトリ、環境変数などを含むシェルの状態を処理していると確信しています.

したがって、次の手順を実行してください。

session.execCommand("cd /root/somedir \n".getBytes());
session.execCommand("ls . ".getBytes());

これがうまくいくことを願っています。幸運を。

于 2011-10-02T16:48:14.217 に答える