Apache Commons Execで起動したコマンドの標準入力にテキスト引数を渡す必要があります(奇妙なことに、コマンドはgpgで、引数はキーストアへのパスフレーズです; gpgにはパスフレーズを明示的に提供する引数はありません、標準入力からのみ受け入れる)。Apache Commons Execで起動された実行可能ファイルに文字列引数をパイプする方法はありますか?
さらに、私はLinuxとWindowsの両方をサポートするためにこれが必要です。
私はcat mypassphrase|gpg --passphrase-fd
または
type mypassphrase|gpg --passphrase-fd
を行うだろうが、それは実行可能しかし、CMD(解釈コマンドに組み込まれたコマンドではないようなタイプは、Windows上で動作しないシェルスクリプトで
。EXE)。
コード(上記理由による)は以下のとおりです。このためにシェル全体を生成するにはあまりにも醜いです、私はより洗練されたソリューションを探していました。残念ながら、BouncyCastleライブラリとPGPの間にはいくつかの非互換性の問題がありますので、(非常に短い)時間に完全にプログラム的なソリューションを使用することはできません。
ありがとうございます。
CommandLine cmdLine = new CommandLine("type");
cmdLine.addArgument(passphrase);
cmdLine.addArgument("|");
cmdLine.addArgument("gpg");
cmdLine.addArgument("--passphrase-fd");
cmdLine.addArgument("0");
cmdLine.addArgument("--no-default-keyring");
cmdLine.addArgument("--keyring");
cmdLine.addArgument("${publicRingPath}");
cmdLine.addArgument("--secret-keyring");
cmdLine.addArgument("${secretRingPath}");
cmdLine.addArgument("--sign");
cmdLine.addArgument("--encrypt");
cmdLine.addArgument("-r");
cmdLine.addArgument("recipientName");
cmdLine.setSubstitutionMap(map);
DefaultExecutor executor = new DefaultExecutor();
int exitValue = executor.execute(cmdLine);
を非常に素晴らしい答えを!私の日を救った! – BetaRide