ターミナルで実行されているのと同じ出力をJavaProcessBuilderから取得することを目的として、PATH変数をエコーしたいと思いますecho $PATH
。ただし、実行すると、実際$PATH
にはPATH変数の値ではなく出力になります。ProcessBuilderが$をエスケープしているのではないかと思いますが、これを防ぐためのトリックはありますか?
これは、文字列「$PATH」を出力する私が話しているもののコードサンプルです。
List<String> processBuilderCommand = ImmutableList.of("echo","$PATH");
ProcessBuilder processBuilder = new ProcessBuilder(processBuilderCommand).redirectErrorStream(true);
final Process process = processBuilder.start();
String commandOutput = CharStreams.toString(CharStreams.newReaderSupplier(new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return process.getInputStream();
}
}, Charset.defaultCharset()));
System.out.println(commandOutput);
いくつかの追加のコンテキスト:
sort
単体テストの1つでコマンドが見つからないことをシミュレートしようとしています。私はこのハック/トリックを使用してPATHを変更し、結果を調べprocessBuilder.environment()
て、プロセスに渡されるPATH変数がソートを見つけられないことを確認します(空の文字列とランダムパスを試しました)。シェルが何かおかしなことをしていて、破壊しようとしているPATHをバックアップしているかどうかを確認したいと思います。