5

私は 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」を使用せずに)コマンドを呼び出す方法がわかりませんでした。

これを正しく行う方法を教えてください。

4

1 に答える 1

8

変化する

val ret = sys.process.Process(command, directory) !

val ret = sys.process.stringSeqToProcess(Seq("/bin/bash", "-c", "cd " + directory.getAbsolutePath + ";" + command))

または、Scala が提供するマジックを直接使用することもできます。

import.scala.sys.process._
val ret = "ps -ef" #| "grep -i foo" !
于 2012-10-07T20:32:38.163 に答える