2

WindowsとUnixでいくつかのコマンドラインテストを自動化しようとしています。これを行うために、Java1.6とApacheCommonsCLI1.1を使用しています。Javaコードで行うことは、ApacheCommonsCLIのaddArgumentメソッドを使用して実行するコマンドを作成することです。実行したいコマンドラインを作成した後、コマンドの出力をファイルにパイプしたかったので、コマンドの最後に以下を追加しました

cloudscan_cmdl.addArgument(">");
cloudscan_cmdl.addArgument(cloudscanOutputFilename);

ここで、cloudscanOutputFilenameは、使用するファイル名を含む文字列です。これはWindowsで正常に機能し、コマンドが作成され、リダイレクトされた2つの引数が追加され、ファイルが正常に作成されます。ただし、Unixでは、>とファイル名文字列をリダイレクトではなく実行可能ファイルへの追加の引数として扱います。

Unixにこのコマンドをコマンドラインで直接入力したかのように読み取らせるにはどうすればよいですか?コマンドを文字列として出力し、Unixでコピーして貼り付けましたが、期待どおりに機能しますが、Javaプログラムから実行すると、リダイレクトが正しく処理されません。

メソッドのaddArgument(string、boolean)バージョンをtrueとfalseの両方として使用してみましたが、どちらも役に立ちません。これは私を真剣に夢中にさせています。

4

2 に答える 2

1

あなたはクラスの目的を誤解しています。述べたように、それは「実行するプロセスを指定する」ためのものです。引数のリストをプログラムに渡すのに役立ちます。シェルに何をすべきかを指示するためではありません。 >シェルによって実装されるリダイレクト演算子です。それがWindowsで動作するという事実は偶然です。

また、これはApacheCommonsCLIではなくApacheCommonsExecの一部であることに注意してください。

自分でリダイレクトを行わないようにするための最善のオプションは、プラットフォームごとに単純なバッチファイルまたはシェルスクリプトを作成して呼び出すことです。

于 2012-04-26T23:47:44.353 に答える
0

エスケープ>、例えば

cloudscan_cmdl.addArgument("\>");
于 2012-04-26T23:43:11.723 に答える