私は Scala の初心者で、シェル コマンドを呼び出すためのラッパーを作成しています。現在、指定したディレクトリからパイプを使用してシェル コマンドを呼び出そうとしています。
これを達成するために、私は簡単なユーティリティを書きました:
def runCommand(command: String, directory: File): (Int, String, String) = {
val errbuffer = new StringBuffer();
val outbuffer = new StringBuffer();
//run the command
val ret = sys.process.Process(command, directory) !
//log output and err
ProcessLogger(outbuffer append _ + "\n", outbuffer append _ + "\n");
return (ret, outbuffer.toString(), errbuffer.toString());
}
ただし、このユーティリティではパイプを使用できません。たとえば、次のようになります。
runCommand("ps -eF | grep -i foo", new File("."));
最初はパイプはシェルの機能かと思って「/bin/sh -c ps -eF | grep -i foo」にしてみましたが、パイプの右からの式は無視されたようです。
でコマンドを実行してみました ! 構文(sys.process._パッケージ)を調べましたが、指定したディレクトリから(「cd」を使用せずに)コマンドを呼び出す方法がわかりませんでした。
これを正しく行う方法を教えてください。