4

Javaで端末エミュレータを作ろうとしています。Java プログラムはユーザーからのコマンドを受け入れ、その出力を表示します。「ls」などの単純なコマンドはエミュレートできますが、「cd」などのコマンドの処理方法がわかりません。これは、端末コマンドの実行に exec() メソッドを使用しているためです。したがって、すべてのコマンドは現在のディレクトリで実行されます。「cd ..」のようなコマンドは実行されますが、各コマンドは exec() によって個別に実行されるため、永続的な効果はありません。
セッション全体をエミュレートするにはどうすればよいですか??

4

3 に答える 3

5

でコマンドを実行している場合exec()は、端末エミュレータを作成していません。あなたはシェルを書いています。その場合、環境変数や作業ディレクトリなど、シェルが追跡するものを追跡する必要があります。

本当に端末エミュレーターを書きたい場合は、疑似端末を介してシェル プロセスと通信することになります。その場合、プログラムは、回線の状態や画面に表示されるものなど、端末が追跡するものを追跡するだけです。

ほとんどのドキュメンテーションでは、C API を使用していることを前提としているため、Java から疑似端末を操作するのは少し注意が必要です。 man pty始める必要があります。Java プロセスは、FileStream オブジェクトを使用して疑似端末のマスター側を開く必要があります。Java内に子プロセスを取得して擬似端末のスレーブ側を開く方法があるかどうかはわかりません。exec()疑似端末のスレーブ側にリダイレクトされた標準入力/出力/エラーで別のシェルコマンドを開始するシェルコマンドを呼び出す必要がある場合があります。

于 2013-01-08T17:27:21.660 に答える
2

JSch は、SSH2 の純粋な Java 実装です。JSch を使用すると、sshd サーバーに接続してポート転送、X11 転送、ファイル転送などを使用でき、その機能を独自の Java プログラムに統合できます。

http://www.jcraft.com/jsch/

于 2013-01-08T17:31:14.270 に答える