2012-07-23 14 views
7

LinuxのScalaスクリプトからulimit -nのようなシステム設定を確認する必要があります。残念ながら、これはシェル組み込みコマンドでは動作しませんScalaからシェル組み込み関数を実行するには

import scala.sys.process._ 
println("ls -lha".!!) 

:私はのようなscala.sys.processパッケージを使用することになり、私は普通のコマンドに対処しなければなりませんでした。 Scalaの組み込みのシェルから出力をキャッチする方法はありますか?

更新:

私は運でいくつかの形で通常のトリックsh -c "ulimit -n"を試してみました。以下のすべてのコマンドは失敗します。

"sh -c 'ulimit -n'".!! 
"sh -c \"ulimit -n\"".!! 
"""sh -c "ulimit -n"""".!! 
"""sh -c "ulimit -n """ + "\"".!! 

そして私はREPLでのランタイムエラーを取得しています:

-n": 1: Syntax error: Unterminated quoted string 
java.lang.RuntimeException: Nonzero exit value: 2 
    at scala.sys.package$.error(package.scala:27) 
    at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:131) 
    at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:101) 
    at .<init>(<console>:11) 
    at .<clinit>(<console>) 
    at .<init>(<console>:11) 
    at .<clinit>(<console>) 
    at $print(<console>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704) 
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920) 
    at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43) 
    at scala.tools.nsc.io.package$$anon$2.run(package.scala:25) 
    at java.lang.Thread.run(Thread.java:722) 
+0

ScalaスクリプトなどでREPLの外で試しましたか? –

答えて

10

文字列はシェルコマンドに変換すると、パラメータはスペースで区切られています。試した表記規則はシェルの規則なので、それを適用するにはまずシェルが必要です。

各パラメータの詳細を制御する場合は、Stringの代わりにSeq[String]、または同じものになる工場Processのいずれかを使用します。たとえば、次のように

Seq("sh", "-c", "ulimit -n").!! 
+0

それだけです!ありがとう:) – nab

4

使用

println(Process("sh", Seq("-c","ulimit -n")).!!) 

あなたがsh -c 'ulimit -n'を入力すると、シェルが正常に何を模倣します。つまり、コマンドはshで、引数は-culimit -nです。

関連する問題