コマンド(これはコマンドラインJavaアプリです)を実行し、その出力を読み取り、シェルスクリプトを使用して入力を入力するにはどうすればよいですか。それは可能ですか?GNU Screenと呼ばれるものについて聞いたのですが、Googleで検索すると、役に立たないように見えますか?私は非常に混乱しています。したがって、基本的には、コマンドを実行し、その出力を取得し、送信して入力を送信する必要があります。注:コマンドを停止するには、「exit」と入力する必要があるため、「はい」と入力します。私はここで混乱しています。GNU Screenのチュートリアルと説明を教えてくれるか、何かを見せてくれると助かります。
3 に答える
入出力リダイレクトを使用します。例えば、
java yourprog args > output.txt 2> erroutput.txt < input.txt
input.txtには、コマンドラインで入力する文字列が含まれます。System.out.printlnはoutput.txtに移動し、System.err.printlnはerroutput.txtに移動します
Screenは単なる仮想端末エミュレーターであり、単一のシェル画面から複数のシェルを使用できます。
入力を待つ必要がない場合exit
:
output=$(echo "exit" | java prog)
あなたが探しているのはExpect、「[...] telnet、ftp、passwd、fsck、rlogin、tipなどのインタラクティブなアプリケーションを自動化するためのツール」のようです。Tclスクリプト言語を使用します。
ただし、プログラムに送信するコマンドが同じプログラムの以前の出力に依存していない場合、Bashはそれ自体で十分に機能する可能性があります。一時ファイルとI/Oリダイレクトを使用するだけです(Usman Saleemの回答のように):
- コマンドのリストを最初のファイルに保存します。と
- プログラムの標準入力をそのファイルにリダイレクトします。と
- 標準出力を2番目のファイルにリダイレクトします。
組み込みコマンドはread
、生成された出力ファイルを読み取るのに役立つ場合があります。
GNU screenは単なる「ターミナルマルチプレクサ」プログラムであり、a)単一のモデムまたはSSH接続を介して複数のターミナル「ウィンドウ」を使用でき、b)サーバーから切断した後もプログラムを実行し続けることができます。それはあなたが探しているプログラムではありません。
私がお勧めしないことの1つは、シェルスクリプトでプログラムの入力を生成し、プログラムの出力をリアルタイムで受け入れるようにすることです。データはstdio出力バッファに取り込まれ、デッドロックが発生する可能性があります。これがExpectが作成された理由です。