8

ulimit -nLinux の Scala スクリプトなどのシステム設定を確認する必要があります。通常のコマンドを処理する場合scala.sys.process、次のようなパッケージを使用します。

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

残念ながら、これはシェルのビルトインでは機能しません。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)
4

2 に答える 2

11

文字列をシェルコマンドに変換する場合、パラメータはスペースで区切られます。試した規則はシェルの規則であるため、それらを適用するには最初にシェルが必要になります。

各パラメータをより細かく制御したい場合は、のSeq[String]代わりにString、またはProcess同じものに相当するファクトリの1つを使用してください。例えば:

Seq("sh", "-c", "ulimit -n").!!
于 2012-07-23T19:01:29.120 に答える
5

使用する

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

に入ると、シェルが通常行うことを模倣しますsh -c 'ulimit -n'。つまり、コマンドはでありsh、引数はとです。-culimit -n

于 2012-07-23T19:01:34.757 に答える